我只是想导入一个中文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 ......但它仍然不起作用。
答案 0 :(得分:6)
这是用于显示角色的终端系统。在Windows 7上使用IDLE,它工作正常:
>>> val = u'\u76d8'
>>> print val
盘
但如果我使用cmd.exe
,那么我会收到您的错误。
使用支持unicode编码的终端显示方法。
答案 1 :(得分:1)
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')
这样你只会打印每个终端,输出文件和第二个进程(管道时)可以处理的字节。
如果输入和输出编码相同,那么当然,您不必解码和编码任何东西。但是,由于您遇到了一些麻烦,因此编码很可能会有所不同,因此您必须执行这两个步骤。
答案 2 :(得分:0)
Code page 936是唯一具有字符0x76D8(编码为0xC5CC)的字符。你需要使用gbk或cp936
答案 3 :(得分:0)
with open('chinese.txt','r+b') as inputFile:
bytes = inputFile.read()
print(bytes.decode('utf8'))
答案 4 :(得分:-1)
JUst TRY:
f=open(userinput,'r')
print f.read().decode('gb18030').encode('u8')