最近项目中需要用到字符转码,google了一下有以下命名可用: enca(linux默认是没有安装的), iconv(默认安装);
enca的用法:
enca
-L zh_CN file #查看file的编码格式
enca
-L language -x UTF-8 file
enca
-L zh_CN -x UTF-8 file #将file转换成utf8的编码格式
enca
-L zh_CN -x UTF-8 file1 file2 #转换之后存成file2文件,不覆盖file1
languge详见man
enca 中的LANGUAGE模块
第一列
这两个命令存在一定的区别:
enca在编码时,如果文件本来就是你要转换的那种编码,它不会报错,还是会print出结果来,
而”iconv”则会报错。
enca固然好,但有些编码格式转化不了,此时就想到了将enca和iconv整合在一起使用,通过测试和查看源代码了解到enca报错的几个位置,在此位置执行:iconv 进行转换。enca报错的转换文件能够全部由iconv转换成功。
修改位置:
-
...src/enca.c
-
int
-
main(int argc, char *argv[])
-
{
-
. . .
-
if (enca_errno(an) != ENCA_EEMPTY) { // line: 153 末尾添加iconv执行语句
-
. . .
-
if (execl("/usr/bin/iconv", "iconv","-f", "gbk", "-t", "UTF-8", "-c", ffname_r(file->name), "-o", ffname_r(file->name), NULL) == -1) {
-
perror("execl()");
-
exit(1);
-
}
-
}
-
}
-
-
...src/conver_iconv.c
-
iconv_one_step(File *file_from,
-
File *file_to,
-
iconv_t icd)
-
{
-
...
-
/*在line:175后添加如下语句*/
-
if (execl("/usr/bin/iconv", "iconv","-f", "gbk", "-t", "UTF-8", "-c", ffname_r(file->name), "-o", ffname_r(file->name), NULL) == -1) {
-
perror("execl()");
-
exit(1);
-
}
-
...
-
}
阅读(3615) | 评论(0) | 转发(0) |