由于python中的unicode错误,无法读取文件

时间:2018-09-20 06:42:33

标签: python python-3.x gensim python-unicode

我正在尝试读取文件,当我读取文件时,我遇到了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上运行正常。

5 个答案:

答案 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)

发生这种情况可能有两个原因:

  1. 该文件包含的文本编码格式与'ascii'不同,并且根据您对其他答案的评论,该文本格式为'utf-8'

  2. 该文件根本不包含文本,它是二进制数据。

在情况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()