Chinaunix首页 | 论坛 | 博客
  • 博客访问: 64806
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 77
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-20 20:21
文章分类
文章存档

2015年(1)

2014年(1)

2013年(7)

分类: LINUX

2013-12-02 22:55:25

最近项目中需要用到字符转码,google了一下有以下命名可用: encalinux默认是没有安装的), 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固然好,但有些编码格式转化不了,此时就想到了将encaiconv整合在一起使用,通过测试和查看源代码了解到enca报错的几个位置,在此位置执行:iconv 进行转换。enca报错的转换文件能够全部由iconv转换成功。

修改位置:


点击(此处)折叠或打开

  1. ...src/enca.c
  2. int
  3. main(int argc, char *argv[])
  4. {
  5.  . . .
  6. if (enca_errno(an) != ENCA_EEMPTY) {    // line: 153 末尾添加iconv执行语句
  7.  . . .
  8.     if (execl("/usr/bin/iconv", "iconv","-f", "gbk", "-t", "UTF-8", "-c", ffname_r(file->name), "-o", ffname_r(file->name), NULL) == -1) {
  9.         perror("execl()");
  10.         exit(1);
  11.         }
  12.     }
  13. }

  14. ...src/conver_iconv.c
  15. iconv_one_step(File *file_from,
  16. File *file_to,
  17. iconv_t icd)
  18. {
  19.  ...
  20. /*在line:175后添加如下语句*/
  21.     if (execl("/usr/bin/iconv", "iconv","-f", "gbk", "-t", "UTF-8", "-c", ffname_r(file->name), "-o", ffname_r(file->name), NULL) == -1) {
  22.     perror("execl()");
  23.     exit(1);
  24.     }
  25. ...
  26. }


阅读(3564) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~