Не удается прочитать файл из-за ошибки Unicode в Python - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь прочитать файл, и когда я читаю его, я получаю ошибку 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 он работает правильно.

Ответы [ 4 ]

0 голосов
/ 20 сентября 2018

Для этого может быть две причины:

  1. Файл содержит текст, закодированный с кодировкой, отличной от 'ascii', и, согласно вашим комментариям к другим ответам, 'utf-8'.

  2. Файл вообще не содержит текста, это двоичные данные.

В случае 1 вам нужно выяснить, кактекст был закодирован и используйте эту кодировку для открытия файла:

open(url_text, encoding=your_encoding)

В случае 2 вам нужно открыть файл в двоичном режиме:

open(url_text, 'rb')
0 голосов
/ 20 сентября 2018

Как видно, кодировкой по умолчанию является 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
0 голосов
/ 20 сентября 2018

Я предполагаю, что данные содержат байты, так почему бы вам не попробовать этот

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") 
0 голосов
/ 20 сентября 2018

Вы можете использовать codecs.open , чтобы исправить эту проблему с правильной кодировкой:

import codecs
with codecs.open(filename, 'r', 'utf8' ) as ff:
    content = ff.read()
...