当前位置: 技术问答>linux和unix
用iconv进行unicode编码和编码表方法的问题
来源: 互联网 发布时间:2016-06-06
本文导语: linux环境下,主要解决短信unicode加码解码 字符串 "12345abcde" 用编码表方法(这种方式是现在程序里用的,肯定是正确的),然后写到文件里,用vi打开文件是这样的 “^@1^@2^@3^@4^@5^@a^@b^@c^@d^@e” 但是用iconv函数的模式会显示...
linux环境下,主要解决短信unicode加码解码
字符串 "12345abcde"
用编码表方法(这种方式是现在程序里用的,肯定是正确的),然后写到文件里,用vi打开文件是这样的 “^@1^@2^@3^@4^@5^@a^@b^@c^@d^@e”
但是用iconv函数的模式会显示以下结果(为方便用iconv命令代替
iconv -f GB18030 -t UCS-2 tmp.txt>tmp2.txt)
显示的结果是(括号里的)
{
1^@2^@3^@4^@5^@a^@b^@c^@d^@e^@
^@
}
我也用GBK或者GB2312代替过UCS-2,但是只有UCS-2最接近
然后我把编码表的第一个 ^@ 去掉后,也能用 iconv -f UCS-2 -t GB18030 tmp3.txt>tmp2.txt 得出结果,不过少了最后一个字母,这个可能是因为最后那个^@造成的。
所以我现在想知道如何用iconv来实现短信的unicode问题。
字符串 "12345abcde"
用编码表方法(这种方式是现在程序里用的,肯定是正确的),然后写到文件里,用vi打开文件是这样的 “^@1^@2^@3^@4^@5^@a^@b^@c^@d^@e”
但是用iconv函数的模式会显示以下结果(为方便用iconv命令代替
iconv -f GB18030 -t UCS-2 tmp.txt>tmp2.txt)
显示的结果是(括号里的)
{
1^@2^@3^@4^@5^@a^@b^@c^@d^@e^@
^@
}
我也用GBK或者GB2312代替过UCS-2,但是只有UCS-2最接近
然后我把编码表的第一个 ^@ 去掉后,也能用 iconv -f UCS-2 -t GB18030 tmp3.txt>tmp2.txt 得出结果,不过少了最后一个字母,这个可能是因为最后那个^@造成的。
所以我现在想知道如何用iconv来实现短信的unicode问题。
|
[root@horse tmp]# cat list.dat
?1?
????
[root@horse tmp]# iconv -f gb2312 -t utf8 output.dat
[root@horse tmp]# cat output.dat
中国
中文
中文信息
[root@horse tmp]#
|
|
那是因为你那个根本就不是 GB18030 编码的:
[root@horse tmp]# cat txt1
123456abcde
[root@horse tmp]# od -t x2 txt1
0000000 3231 3433 3635 6261 6463 0a65
0000014
[root@horse tmp]# iconv -f ascii -t GB18030 txt2
[root@horse tmp]# cat txt2
123456abcde
[root@horse tmp]# od -t x2 txt2
0000000 3231 3433 3635 6261 6463 0a65
0000014
[root@horse tmp]#