python字符处理一些思考
先解释几个概念
ASCII字符集:英文,英文符号采用西欧编码,中文字符采用GB2321和GBK,两者兼容
unicode字符集:UTF-8编码
如果一个文件中文使用的ASCII字符集,通过gbk编码,使用python输出而不进行编解码的话,就会造成输出的字符乱码
这里有三个方案可以解决
- 修改显示的终端软件的默认编码格式,还是选择为gbk格式编码,则会显示正常的中文字符
- 如输出到文件中,然后通过文本编辑软件打开。(这里要说明一下,文本编辑软件必须要支持自动转换编解码才行。像sublime txt3 就不支持,还是需要手动进行设置。vim 的话可以在.vimrc中添加如下配置: set fileencodings=ucs-bom,utf-8,GB18030,gbk 就可以自行转换编码格式。)
- 使用python程序本身进行编解码的操作
下面就重点讲一下通过python程序进行编解码的操作
首先我们建立一个csv格式的文件,叫做codetest.csv。
通过notepad++打开,notepad++默认是utf8格式编码显示的,可以看到,内容中有中文是乱码。
通过方法2转换为gb2312编码可以显示出正常的中文字符
如果使用python在终端输出,编写读取csv文件的python代码
#!/usr/bin/python
#coding:utf-8
import os
import csv
with open('~/codetest.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print row[5]
通过在python命令行中执行上述程序,可以得到“栏目3”这个字符串的gb2312的编码:
>>> with open('~/codetest.csv', 'r') as f:
... reader = csv.reader(f)
... for row in reader:
... str = row[5]
...
>>> str
'\xc0\xb8\xc4\xbf3'
>>>
这串编码通过utf-8解码出来的字符就是下图显示的这几个字符。
为了能得到正确的编码需要怎么做呢?只需要在打印前先进行解码
print row[5].decode('gb2312')
这样才输出就可以看到正确的结果
230

被折叠的 条评论
为什么被折叠?



