linux下文件字符集转化实战篇

linux下文件字符集转化实战篇 mysql

 

------------------------------------------ linux

为何转换编码,原由:分析应用程序日志,文件编码格式gb2312(含中文字符), 算法

经过linux shell脚本从日志中提取出须要的字段并生成有固定符号隔离的文本文件导入到mysql数据库, sql

mysql创建的库字符集是utf8(特殊缘由没有改为gb2312,因为原始的日志文件是gb2312格式, shell

经过shell生成的最终文件编码格式也是gb2312编码,因此才须要用到编码转换, 数据库

mysql库字符集编码必须与导入的文本文件编码格式一致,才能顺利导入。 ide

 

脚本 工具

# vi x 编码

#!/bin/sh spa

ts=`(date +%Y%m%d)`

#targetdir=/root/siji/

#cd $targetdir

cat alertlog | grep $ts | grep -a '' > c34log

# 逐一取须要的字段,并用;号隔开

cat c34log | awk '{print $1}' | sed 's/.*$/&\;/g'>s1

cat c34log | awk '{print $2}' | sed 's/.*$/&\;/g'>s2

cat c34log | awk '{print $3}' | sed 's/.*$/&\;/g'>s3

cat c34log | awk '{print $4}' | sed 's/.*$/&\;/g'>s4

cat c34log | awk '{print $5}' | sed 's/.*$/&\;/g'>s5

cat c34log | awk -F'(' '{print $2}' | awk -F')' '{print $1}' | sed 's/%//g' | sed 's/.*$/&\;/g' >s6

# 合成各个字段,生成最终文本文件

paste s1 s2 s3 s4 s5 s6 > all

# 把含中文的文本文件转换成的utf8编码格式

enca -L zh_cn -x utf8 all

# 导入数据库

/usr/local/mysql/bin/mysql -h 127.0.0.1 -u root -pYOUR_PASSWORD <sql

 

sql文件内容(sql语句)

# vi sql

# 使用alertlog数据库

use alertlog;

# 导入生成的all文本文件,其中用;隔离各个字段,回车隔离每行

load data local infile 'all' into table c3log fields terminated by ';' lines terminated by '\n';

 

# chmod 711 x

 

 

一:字符编码的转换工具

 

1.多平台方法:

iconv 提供标准的程序和API来进行编码转换;

convert_encoding.py 基于Python的文本文件转换工具;

decodeh.py 提供算法和模块来谈测字符的编码;

 

2.Linux:

recode 转换文件编码;

Utrac 转换文件编码;

cstocs 转换文件编码;

convmv 转换文件名编码;

enca 分析给定文件的编码;

 

3.Windows:

cscvt 字符集转换工具;

 

二:linux下查看文件编码

 

1. vi中查看文件编码

:set fileencoding

 

2. enca强大的查看编码工具

 

# 查看文件编码

# enca -L 如今文件的语言 -d 需查看编码的文件名

enca -L zh_cn -d test_zh_cn.file

 

------------

# enca -l language 查看支持的语言

 

. linux转换文件编码

 

1.enca转化编码(强烈推荐enca工具)

# enca -L 如今文件的语言 -x 须要转换编码 须要转换编码的文件

enca -L zh_cn -x utf8 test_zh_cn.file

 

2. iconv转换,这个工具很差使!常常转化不成功

iconv -f 文件原来编码 -t 须要转换的编码 须要转换的编码的文件 -o 转换编码后的文件

或者

iconv -f 文件原来编码 -t 须要转换的编码 须要转换的编码的文件 > 转换编码后的文

相关文章
相关标签/搜索