2。然后通过
decodedUnicodeStr = ansiGbkStr.decode("GBK")
就可以把ansiGbkStr解码为对应的unicode字符了。
相关背景知识,可参考:
crifan 字符编码详解
(这里不给贴地址,所以请自己用google搜标题,即可找到帖子地址)
我昨天遇到一个疑惑,使用python读入中文,然后print读入的文本,却显示为乱码。os.chdir("C:/Users/v_chjwang/Desktop/weibosent/SentiAnalysis_local")
file = open("./test2.txt", 'r')
def read_file(file_name):
txt = []
for i in file_name:
line = i.split(',')[0]
txt.append(line)
return txt
txt = read_file(file)
>>>txt[1]
'\xe8\xbf\x99\xe9\x83\xa8\xe6\x89\x8b\xe6\x9c\xba\xe5\xbe\x88\xe4\xb8\x8d\xe9\x94\x99\xe3\x80\x82\n'
>>>print txt[1]
杩欓儴镓嬫満寰堜笉阌欍€
我想一定是我的encoding没有设置好,python是偏爱unicode的,我还是先声明一些基础的东西吧。尝试指定软件型号、编码方式、使用sys设置预定的encoding,如下:
#! /usr/bin/env python2.7
# -*- coding:utf-8-*-
#coding=utf-8
import os
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
结果还是不行。错误依旧。
到底是怎么回事呢?我尝试着将文本的encoding由utf-8改成ANSI,结果就正确了。如下效果:
>>>txt[1]
'\xd5\xe2\xb2\xbf\xca\xd6\xbb\xfa\xba\xdc\xb2\xbb\xb4\xed\xa1\xa3\n'
>>>print txt[1]
这部手机很不错。
程序:===================
a = '中文'
b = u'中文'
print a, type(a)
print b, type(b)
print a.decode('gbk')
--------------------------------------
文件格式ansi
#coding=gbk
输出:
中文
中文
中文 ( print a.decode('gbk') )
--------------------------------------
文件格式utf8带bom
输出:
涓 枃
中文
中文 ( print a.decode('utf8') )
--------------------------------------
他的结论也是说:所以感觉还是用#coding=gbk的ansi格式的存储比较好。
一般来说读出来的字符串,所以要"我".decode("ascii").encode("utf-8")如果还不行,就结合下面这段代码试试,编码可以换换,反正我最近就是这样解决的
import sys
reload(sys)
sys.setdefaultencoding('utf8')