linux 下 iconv 转换文件格式出错

  今天在linux 下导出一份excel 之后,用命令iconv 转换一个utf8 文件的时候出错,但是同时做了两个转换,一个是可以的。一个提示错误,然后文件内容只转换了一半。

iconv: illegal input sequence at position 5040

后来找了资料,才知道原因:

a、在做编码转换的时候,如果你的源格式设定为 GB2312 的话,而且在转换成 UTF-8 的时候,发现程序会报“illegal input sequence at position xxxx”的错误。这是由于你之前的做的假定有问题。GB2312 是国标里面一个最小也是最早的中文编码标准。其中,只涵盖了 6,763 个汉字。所以你需要转换的文件的原始的格式可能并不是 GB2312 编码。这个时候,你可以用 GB18030 做为源格式来进行转换。GB18030 是最新的国家标准,包含了 27,564 个汉字,而且向下兼容 GB2312 和 GBK。

b、另外,支持 Unicode 且 Free 的中文字库我推荐使用”文泉驿“。这好像也是目前为止,唯一的一个以支持 Unicode 为出发点的 Free 的中文字库。

-f: from 来源编码

-t: to 转换后新编码

-c: 忽略无效字符

-s: --silent ,忽略警告

-o file:可选,没有的话直接转换当前文件, 使用-o 保留源文件

再次输入:iconv -f utf8 -t gb18030 test.txt > test01.txt   就OK了。

iconv -f 原编码 -t 新编码 filename -o newfile

iconv  -f utf8   -t gb18030  /home/jenkins/weixin1.xls  -o /home/jenkins/weixin.xls

补充:

后面有一次转换文件的时候报了Bus error               iconv -futf8 -tgb18030

后面尝试改了几个转换后的编码,都不行,最后发现是源文件和目标文件相同导致的问题。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入式 Linux 中使用 iconv 进行字符编码转换的步骤如下: 1. 包含头文件:在源代码中包含 `<iconv.h>` 头文件,这是进行字符编码转换所需的函数和数据结构的声明。 2. 打开转换句柄:使用 `iconv_open` 函数打开一个字符编码转换句柄。该函数的原型为: ``` iconv_t iconv_open(const char* tocode, const char* fromcode); ``` 其中 `tocode` 是目标编码,`fromcode` 是源编码。可以使用 `iconv --list` 命令查看系统支持的编码。 3. 设置转换选项:可以通过 `iconvctl` 函数设置一些转换选项,例如忽略无法转换的字符或错误处理策略。这一步骤可以根据需求来选择,不是必须的。 4. 初始化转换状态:使用 `iconv` 函数初始化字符编码转换状态。该函数的原型为: ``` size_t iconv(iconv_t cd, char** inbuf, size_t* inbytesleft, char** outbuf, size_t* outbytesleft); ``` 其中 `cd` 是之前打开的转换句柄,`inbuf` 是输入缓冲区指针,`inbytesleft` 是输入缓冲区大小,`outbuf` 是输出缓冲区指针,`outbytesleft` 是输出缓冲区大小。 5. 进行编码转换:使用 `iconv` 函数进行字符编码转换。反复调用该函数,直到转换完成或出错。每次调用后,输入缓冲区的指针和大小会更新,输出缓冲区的指针和大小也会更新。 6. 关闭转换句柄:使用 `iconv_close` 函数关闭字符编码转换句柄。该函数的原型为: ``` int iconv_close(iconv_t cd); ``` 其中 `cd` 是之前打开的转换句柄。 以上是使用 iconv 进行字符编码转换的基本步骤。在实际使用中,你需要根据具体的需求来设置输入和输出缓冲区,并根据返回值来处理转换结果或错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值