Ошибка Python-Unicode — «utf-8» не может декодировать байт в файле .py, но может в интерактивной среде

Информация о системе:

sys.version = 3.5.2 | Anaconda 4.1.1 (64-разрядная версия)

Visual Studio Community 2015: версия 14.0.25425.01, обновление 3

Инструменты Python для Visual Studio: 2.2.40623.00

Инструменты Python для Visual Studio — интеграция Django: 2.2.40623.00

Инструменты Python для Visual Studio — поддержка профилирования: 2.2.40623.00

Код:

import nltk
french_tokenizer = nltk.data.load('tokenizers/punkt/french.pickle')
text = "J’habite aux États-Unis. Où est-ce que vous habitez? Quel est votre film préféré?"
sentList = french_tokenizer.tokenize(text)
print(sentList)

Проблема:

Когда я запускаю этот код построчно в 64-битной интерактивной среде Python 3.5, каждая строка обрабатывается правильно.

Когда я пытаюсь запустить всю программу сразу, я получаю следующую ошибку относительно строки "text =": SyntaxError: (ошибка юникода) кодек 'utf-8' не может декодировать байт 0x92 в позиции 0: неверный старт байт

Возможно связано: я обратился к документации по Python (https://docs.python.org/3.5/howto/unicode.html) и попробовали некоторые из их примеров кода и столкнулись с похожей проблемой:

répertoire = "/tmp/records.log"

отлично работает в 64-битной интерактивной среде Python 3.5, но выдает следующее при запуске как часть файла .py (не запускает остальную часть файла, включая очень простые команды «печати», которые предшествуют ему):

Программа '[13644] python.exe' завершилась с кодом 1 (0x1).

У кого-нибудь есть мысли о том, почему это может происходить / как исправить эту ошибку?


person Aaron McKenny    schedule 05.02.2017    source источник
comment
Какой текстовый редактор вы использовали? возможно, вы сохраняете кодировку кодовой страницы Windows, а не utf-8.   -  person tdelaney    schedule 05.02.2017
comment
Вы выполняете свой файл .py с тем же интерпретатором, что и интерактивная среда? (т.е. через Python 64-bit 3.5?)   -  person Anonymous    schedule 05.02.2017
comment
Какой текстовый редактор я использовал: --Для текста J'habite... я скопировал его с веб-страницы перевода и вставил прямо в текстовый редактор Visual Studio 2015. . --Для текста репертуара я скопировал его с веб-страницы Python Unicode и вставил прямо в текстовый редактор Visual Studio 2015. Тот же интерпретатор, что и в интерактивной среде: Да: sys.version = 3.5.2 |Anaconda 4.1.1 (64-разрядная версия)| (по умолчанию, 5 июля 2016 г., 11:41:13) [MSC v.1900 64 бит (AMD64)]   -  person Aaron McKenny    schedule 06.02.2017


Ответы (1)


Внимательно посмотрите на волнистую вещь в text = "J’habite ..." — это U+2019 ПРАВАЯ ОДИНАРНАЯ КАВАТЫ. Кодирование этого символа в cp1252 дает "\x92". Похоже, ваш исходный код закодирован в cp1252 или подобном. Вы должны убедиться, что ваш исходный код закодирован в utf-8.

person John Machin    schedule 06.02.2017
comment
Спасибо, Джон... Я скопировал текст с веб-страницы и вставил его в визуальную студию как есть, поэтому, думаю, трудно сказать, в какой кодировке он был (по крайней мере, для меня, я новичок в обработке Unicode). Однако в рамках процесса отладки я также превратил его в text = "Jhabite aux états-Unis. O est-ce que vous habitez? Quel est votre film prr?", где я удалил все символы, отличные от ascii, и добавил обратно только тот, который я скопировал непосредственно из карты символов Windows (alt+130) и получил ту же ошибку. Та же проблема: работает в интерактивной среде, но не в .py. Какие-нибудь мысли? - person Aaron McKenny; 06.02.2017
comment
Вам нужно сообщить текстовому редактору Visual Studio 2015, что вы хотите использовать кодировку utf-8 при сохранении файлов .py. Я не использую VS, поэтому я не могу вам помочь с этим. - person John Machin; 07.02.2017