我正在尝试读取文件,当我读取文件时,我遇到了Unicode错误。
def reading_File(self,text):
url_text = "Text1.txt"
with open(url_text) as f:
content = f.read()
错误:
content = f.read()# Read the whole file
File "/home/soft/anaconda/lib/python3.6/encodings/ascii.py", line 26, in
decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0x92 in position 404:
ordinal not in range(128)
为什么会这样?我试图在Linux系统上运行相同的文件,但在Windows上运行正常。
答案 0 :(得分:0)
您可以使用codecs.open使用正确的编码来解决此问题:
import codecs
with codecs.open(filename, 'r', 'utf8' ) as ff:
content = ff.read()
答案 1 :(得分:0)
看起来,默认编码为ascii,而Python3为utf-8,可以使用以下语法打开文件
open(file, encoding='utf-8')
检查系统默认编码
>>> import sys
>>> sys.stdout.encoding
'UTF-8'
如果不是UTF-8,请重置系统的编码。
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_TYPE=en_US.UTF-8
答案 2 :(得分:0)
我假设数据包含字节,那么为什么不尝试这个
with open("myfile", "rb") as f:
byte = f.read(1)
while byte != "":
# Do stuff with byte.
byte = f.read(1)
一旦有了字节,就可以轻松地将其解码为字符串
myString = byte.decode("utf-8")
答案 3 :(得分:0)
发生这种情况可能有两个原因:
该文件包含的文本编码格式与'ascii'
不同,并且根据您对其他答案的评论,该文本格式为'utf-8'
。
该文件根本不包含文本,它是二进制数据。
在情况1中,您需要弄清楚文本是如何编码的,并使用该编码来打开文件:
open(url_text, encoding=your_encoding)
在情况2中,您需要以二进制模式打开文件:
open(url_text, 'rb')
答案 4 :(得分:0)
根据问题
我试图在Linux系统上运行相同的文件,但在Windows上运行正常。
由于我们从问题和其他一些答案中知道文件的内容既不是ASCII也不是UTF-8,因此可以合理地猜测文件是使用Windows上常见的8位编码之一编码的。
0x92
发生映射时,会映射到在美国和拉丁美洲/欧洲地区使用的cp125 *编码中的字符“ RIGHT SINGLE QUOTATION MARK”。
所以可能应该这样打开文件:
# Python3
with open(url_text, encoding='cp1252') as f:
content = f.read()
# Python2
import codecs
with codecs.open(url_text, encoding='cp1252') as f:
content = f.read()