Python对中文字符的处理(utf-8/ gbk/ unicode) 转载
转载自:http://blog.csdn.net/chixujohnny/article/details/51782826
文件第一行永远默认
# coding: utf-8
1.什么是utf-8/ gbk/ unicode编码
我就通俗易懂的讲解一下吧,讲的复杂了肯定是没人看的
utf-8是Unix下的一种通用编码,可以对汉字编码,应该是Unix环境下能打开看到汉字的唯一编码(gbk试过,乱码)
gbk是windows环境下的一种汉字编码,其中GB2312编码也算是gbk编码,这种编码在Unix环境中打开是乱码,大概是这个样子:
可以看到,英文正常显示,但是汉字呢就gg了,一般看到这种跟个蛋一样的字符就是gbk汉字(只在mac中试过,别的Unix不知道是不是个蛋)
unicode是一种二进制编码,所有的utf-8和gbk编码都得通过unicode编码进行转译,说的直白一点,utf-8和gbk编码之间不能直接转换,要在unicode之间过个场才能转换。
下面我图解一下,方便理解:
而在mac环境下pycharm只能显示unicode的汉字,举个例子:
# coding:utf-8 s = '我是一串汉字' print s
首先,s是一串utf-8编码的汉字,在print的时候,先把utf-8转化成unicode再输出成显示的汉字。
2.如何查看文档、字符串编码格式
先安装chardet模块
pip install chardet
# coding:utf-8 import chardet s = '哈哈哈我就是一段测试的汉字呀' print chardet.detect(s)
输出:{'confidence': 0.99, 'encoding': 'utf-8'}
这个办法只能输出这段字符可能的编码格式,我们看到0.99的可能是utf-8,其实也就是utf-8编码了,只要字符串够长,后面的置信度都是0.99
当然也可以用file命令
file -i mssql.py mssql.py: text/x-java; charset=utf-8
3.各种编码之间如何转换
python中有两个很好用的函数 decode() 和 encode()
decode(‘utf-8’) 是从utf-8编码转换成unicode编码,当然括号里也可以写'gbk'
encode('gbk') 是将unicode编码编译成gbk编码,当然括号里也可以写'utf-8'
假如我知道一串编码是用utf-8编写的,怎么转成gbk呢
s.decode('utf-8').encode('gbk')
图解一下:
4.我为什么要把编码转来转去
在使用NLPIR分词的时候,对输入文档的编码格式是有严格要求的,在函数初始化的时候可以设置输入源文档的编码格式。
但是源文档的编码可能一会儿是utf-8一会儿是gbk,这就要求统一一下格式,不能格式一乱就报错了,
具体操作我后面会写一篇python调用NLPIR的说明
centos6系统的系统编码
cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
mysql的my.cnf
character_set_server = utf8mb4
default_character_set = utf8
SQL Server2014的字符编码,SQL Server没有UTF8这种字符编码的说法,只有排序规则
如有不对的地方,欢迎大家拍砖o(∩_∩)o