UnicodeDecodeError: кодек ascii не может декодировать байт 0xc3 в позиции 1286: порядковый номер не в диапазоне (128)

Traceback (most recent call last):
File "AutomationTool.py", line 2, in <module>
import MultiProcessController, RedisUtil, ADUtils, json, time
File "/var/www/html/ARB-Automation/MultiProcessController.py", line 2, in <module>
import AdTitleExtraction, ADUtils, AdwordsClient, RedisUtil, FinalURLRetrieval, ClusterStrategy, \
File "/var/www/html/ARB-Automation/AdTitleExtraction.py", line 2, in <module>
import Config, ADUtils, re, wordsegment as WS, queue, threading, time
File "/var/www/html/ARB-Automation/ADUtils.py", line 3, in <module>
import pymssql, pymysql, wordsegment as WS, gc
File "/usr/local/lib/python3.4/site-packages/wordsegment.py", line 49, in <module>
bigram_counts = parse_file(join(basepath, 'bigrams.txt'))
File "/usr/local/lib/python3.4/site-packages/wordsegment.py", line 45, in parse_file
return dict((word, float(number)) for word, number in lines)
File "/usr/local/lib/python3.4/site-packages/wordsegment.py", line 45, in <genexpr>
return dict((word, float(number)) for word, number in lines)
File "/usr/local/lib/python3.4/site-packages/wordsegment.py", line 44, in <genexpr>
lines = (line.split('\t') for line in fptr)
File "/usr/local/lib/python3.4/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]


UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1286: ordinal not in range(128)

Я пытаюсь использовать wordsegment в своем коде Python, и я использую python3.4.4, и он работал на моей локальной машине. Я развернул на рабочем сервере, и я получаю эту ошибку, я понятия не имею, почему это произошло. Может ли кто-нибудь помочь мне, пожалуйста?


person Chintan Shah    schedule 15.03.2016    source источник
comment
Может ли разница быть не в среде (сервер/локальная машина), а в данных? Я имею в виду, могут ли данные, используемые в качестве входных данных на вашем сервере, отличаться от тех, которые вы использовали для тестов на своей машине? Можете ли вы добавить печать / журнал, чтобы получить ошибочные данные, по крайней мере, чтобы исключить среду и посмотреть, сможете ли вы воспроизвести локально?   -  person Jérôme    schedule 15.03.2016
comment
Может быть связано с stackoverflow.com/questions/24475393/   -  person Jérôme    schedule 15.03.2016
comment
Ваш языковой стандарт определенно установлен на C.   -  person Antti Haapala    schedule 15.03.2016
comment
@ Жером Привет, я тоже проверил данные, они абсолютно идентичны. То, что вы сказали, было и моим первым подозрением.   -  person Chintan Shah    schedule 15.03.2016


Ответы (1)


Python 3 пытается вывести правильный набор символов ввода/вывода из настроек локали, если ничего не помогает. Предположительно, локаль на вашем рабочем сервере не является локалью UTF-8, и поэтому Python ошибается.

Вы можете принудительно использовать определенную кодировку, используя переменную среды PYTHONIOENCODING; Например

PYTHONIOENCODING=UTF-8 python myprogram.py

или установив соответствующую локаль UTF-8, например C.UTF-8 или en_US.UTF-8.

person Antti Haapala    schedule 15.03.2016
comment
Спасибо. Я так долго пытался понять это! Также проблема, которая только что возникла, где я могу прочитать больше об этом, чтобы лучше понять это? - person Chintan Shah; 15.03.2016