首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

字符串有多种编码汉字怎么办

2013-09-05 
字符串有多种编码汉字怎么处理曣 yàn,部首: 日 部首笔画: 4 总笔画: 20曣yàn(1)古同“晏”,晴朗许慎注淮南子

字符串有多种编码汉字怎么处理
曣 yàn,
部首: 日 部首笔画: 4 总笔画: 20

yàn
(1)古同“晏”,晴朗     许慎注淮南子云:“晏,无云也。”即晴朗没有云彩的天空
(2)暖

>>> s0 = "曣"
>>> chardet.detect(s0)
{'confidence': 0.5, 'encoding': 'windows-1252'}
>>> s="我是曣"
>>> chardet.detect(s)
{'confidence': 0.99, 'encoding': 'GB2312'}

>>> s.decode("gb2312")
Traceback (most recent call last):
  File "<pyshell#38>", line 1, in <module>
    s.decode("gb2312")
UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 4-5: illegal multibyte sequence


有复杂汉字 请教这种情况怎么处理?
[解决办法]
“有复杂汉字 请教这种情况怎么处理? ”
只要是普通的汉字,包含你这里给出的,都是GB18030所包含的
从汉字包含数量说:
GB2312 < GBK < GB18030
所以,在可以的情况下,去用GB18030,就够你用了。

再不够用,就去用UTF-8,保证都可以。

关于编码,可参考:
中文字符编码标准

抽空,会去再写个简明教程的,到时候你看了,就更容易明白了。
[解决办法]
其实单纯就你在shell中的几句来说

gb18030 > gbk > gb2312

前包含后,所以gb2312的汉字其实很少的
chardet存在两个问题,一是字符太少判断不准,二是虽然判断出gb2312其实应该是gbk才对
你用gbk应该已经可以解决(曣,GBK:95EA),反而是shell几句没涉及yàn(半角)这个拼音用GBK会有问题,要改用全角才行

你可能有疑问,既然gb2312汉字很少,为何网页用gb2312就能显示很多?
那是因为字体的缘故,字体其实不论什么编码,只要对应的码能找到映射出字符,就会显示,超出编码范围也能显示
但用于程序处理则不同,超出范围就不能处理了
所以程序中一般用gbk而不用gb2312

又问:为何程序不用gb18030取代gbk,能处理的编码范围不是更大么?
因为gb18030是不定长的,双字节、三字节都有,在不熟悉的情况下,又不怎么涉及生僻字(主要指一些古体字或变形字,超出gbk范围的),一般选定长、双字节的gbk为宜

热点排行