Python对中文字符的处理(utf-8/ gbk/ unicode) 转载

python学习网 2017-12-07 15:06:03

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

阅读(822) 评论(0)