繁体   English   中英

为什么即使使用编码我也无法在python中显示中文字符?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM