终于理解了unicode、utf-8、gb2312这些编码集之间的关系了
2010-04-24 15:28
435 查看
这两天在写用python写vim脚本的时候遇到了要用这则匹配中文的情况。以前用c#和javascript来做的时候很简单只要用u'[/u4e00-/u9fa5]'来匹配就行了。可是在python中就不管用了,因为这些中文字符串是从vim传入的,而你要是在python代码中直接写 str = u'中文'是没有问题了,我当时百思不得其解,因为以前对字符集这东西是一知半解,当时的理解是中文占2个字节,英文等符号是一个字节。unicode就是2个字节的,utf-8,gb2312这些东西都是某种unicode。真是很傻很天真,好在看了这篇文章才让我真正理解了这个问题的本质。
unicode这东西应该是所有程序都遵循的编码集,不论什么文字都是2字节编码所以中文肯定是2个字节,当然英文也是。而utf-8,gb2312应该算是地方语种,他们的出现可能是先于unicode或者为了和以前的代码保持兼容性,还有一个原因就是从资源节约的角度,比如utf-8对于英文及符号还是沿用ascii的一字节编码,对于中,日,韩三国文字采用三字节编码,这显然都欧美国家的网络传输有好处。而u'[/u4e00-/u9fa5]'是unicode中规定的中文字符范围,因此当用这个这则去匹配vim传入的字符串就不会起作用,因为它传入的字符串是本地编码比如utf-8或者cp936之类的。因此要想在python中正确匹配中文就要先把地方语种转换成官方语种unicode。转换方法很简单就是unicode(str,charset),然后再对这个标准的unicode字符串使用正则就可以了,而charset的获得需要借助chardet这个包。
easy_install chardet 后使用chardet.detect(str)['encoding']来获取编码集名称
unicode这东西应该是所有程序都遵循的编码集,不论什么文字都是2字节编码所以中文肯定是2个字节,当然英文也是。而utf-8,gb2312应该算是地方语种,他们的出现可能是先于unicode或者为了和以前的代码保持兼容性,还有一个原因就是从资源节约的角度,比如utf-8对于英文及符号还是沿用ascii的一字节编码,对于中,日,韩三国文字采用三字节编码,这显然都欧美国家的网络传输有好处。而u'[/u4e00-/u9fa5]'是unicode中规定的中文字符范围,因此当用这个这则去匹配vim传入的字符串就不会起作用,因为它传入的字符串是本地编码比如utf-8或者cp936之类的。因此要想在python中正确匹配中文就要先把地方语种转换成官方语种unicode。转换方法很简单就是unicode(str,charset),然后再对这个标准的unicode字符串使用正则就可以了,而charset的获得需要借助chardet这个包。
easy_install chardet 后使用chardet.detect(str)['encoding']来获取编码集名称
相关文章推荐
- UTF-8 GBK UTF8 GB2312 Unicode 之间的区别和关系
- gbk, gb2312,big5,unicode,utf-8,utf-16之间的关系
- gbk, gb2312,big5,unicode,utf-8,utf-16之间的关系
- ASCII,Unicode,UTF-8,GB2312编码之间的关系
- gbk, gb2312,big5,unicode,utf-8,utf-16之间的关系
- ASCII,Unicode,UTF-8,GB2312编码之间的关系
- gbk, gb2312,big5,unicode,utf-8,utf-16之间的关系
- [转] ASCII,Unicode,UTF-8,GB2312编码之间的关系
- UTF-8 GBK UTF8 GB2312 之间的区别和关系(转)
- 符号编码-ASCII、Unicode、Unicode big endian、UTF-8之间的关系(转)
- 中文乱码的解决之道,理清UTF8,UTF16,GB2312,Big5,Unicode之间的关系
- UTF-8 GBK UTF8 GB2312 之间的区别和关系
- UTF-8 GBK UTF8 GB2312之间的区别和关系
- UTF-8,UNICODE,Gb2312他们3个之间的相互转换
- UTF-8 GBK UTF8 GB2312 之间的区别和关系
- 深入理解-字符编码ASCII,GB2312,GBK,Unicode,UTF-8
- UTF-8 GBK UTF16 GB2312 之间的区别和关系
- UTF-8与GB2312之间的关系
- UTF-8 GBK UTF8 GB2312 之间的区别和关系
- Unicode和UTF-8之间的关系