[英]Why i cannot display the chinese character in python even with the use of encoding?
我只是想导入一个中文txt文件并打印出内容。 这是我从网上复制的txt文件的内容,简体中文: http : //stock.hexun.com/2013-06-01/154742801.html
起初,我尝试了这个:
userinput = raw_input('Enter the name of a file')
f=open(userinput,'r')
print f.read()
f.close()
它可以打开文件并打印,但显示的内容是乱码。 然后我用编码尝试了以下一个:
#coding=UTF-8
userinput = raw_input('Enter the name of a file')
import codecs
f= codecs.open(userinput,"r","UTF-8")
str1=f.read()
print str1
f.close()
但是,它显示了一条错误消息。 UnicodeEncodeError:'cp950编解码器无法在位置50编码字符u'\\ u76d8':非法的mutibyte序列。
为什么会发生错误? 怎么解决? 我尝试过像Big5,cp950这样的其他unicode ......但它仍然无效。
它是用于显示角色的终端系统。 在Windows 7上使用IDLE,它工作正常:
>>> val = u'\u76d8'
>>> print val
盘
但如果我使用cmd.exe
那么我得到你的错误。
使用支持unicode编码的终端显示方法。
Python(至少在Python 3.0之前)知道两种字符串:①字节数组和②字符数组。
②中的字符是Unicode,这种字符串的类型也称为unicode
。
①(Python中的类型名为str
中的字节可以是可打印的字符串或其他内容(二进制数据)。 如果它是可打印的字符串,它也可以是Unicode字符串的编码版本(例如UTF-8,latin-1或类似字符串)。 然后几个字节可以表示单个字符。
在您的用例中,我建议将该文件作为字节列表读取:
with open('filename.txt') as inputFile:
bytes = inputFile.read()
然后通过从文件中使用的编码解码它将该字节数组转换为适当的Unicode字符串(您必须找到它!):
unicodeText = bytes.decode('utf-8')
然后打印出来:
print unicodeText
最后一步取决于输出设备的功能(xterm,...)。 它可能能够显示Unicode字符,然后一切都很好,字符可以正确显示。 但它可能无法使用Unicode,或者更可能的是,Python只是没有充分了解这些功能,那么您将收到错误消息。 如果将输出重定向到文件或将其传递到第二个进程,也会发生这种情况。
为了防止这种麻烦,您可以再次将Unicode字符串转换为字节数组,选择您选择的编码:
print unicodeText.encode('utf-8')
这样,您将只打印每个终端,输出文件和第二个进程(管道)可以处理的字节。
如果输入和输出编码相同,那么当然,您不必解码和编码任何东西。 但是,由于您遇到了一些麻烦,因此编码很可能会有所不同,因此您必须执行这两个步骤。
代码页936是唯一具有字符0x76D8(编码为0xC5CC)的字符。 你需要使用gbk或cp936
with open('chinese.txt','r+b') as inputFile:
bytes = inputFile.read()
print(bytes.decode('utf8'))
试一试:
f=open(userinput,'r')
print f.read().decode('gb18030').encode('u8')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.