Вопрос-Ответ

"Unicode Error 'unicodeescape' codec can't decode bytes..." when writing Windows file paths [duplicate]

"Кодек Unicode Error 'unicodeescape' не может декодировать байты ..." при записи путей к файлам Windows

Я использую Python 3.1 на компьютере с Windows 7. Русский - системный язык по умолчанию, а utf-8 - кодировка по умолчанию.

Глядя на ответ на предыдущий вопрос, я попытался использовать модуль "codecs", чтобы мне немного повезло. Вот несколько примеров.:

>>> g = codecs.open("C:\Users\Eric\Desktop\beeline.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape (<pyshell#39>, line 1)
>>> g = codecs.open("C:\Users\Eric\Desktop\Site.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape (<pyshell#40>, line 1)
>>> g = codecs.open("C:\Python31\Notes.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 11-12: malformed \N character escape (<pyshell#41>, line 1)
>>> g = codecs.open("C:\Users\Eric\Desktop\Site.txt", "r", encoding="utf-8")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape (<pyshell#44>, line 1)

Моей последней идеей было, я подумал, что, возможно, дело в том, что Windows "переводит" несколько папок, таких как папка "users", на русский (хотя ввод "users" по-прежнему является правильным путем), поэтому я попробовал это в папке Python31. По-прежнему безуспешно. Есть идеи?

Переведено автоматически
Ответ 1

Проблема со строкой

"C:\Users\Eric\Desktop\beeline.txt"

Здесь, \U в "C:\Users ... начинается восьмизначный экранирующий код Unicode, такой как \U00014321. В вашем коде за экранирующим символом следует символ "s", который недопустим.

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

"C:\\Users\\Eric\\Desktop\\beeline.txt"

Или добавляйте к строке префикс r (для получения необработанной строки):

r"C:\Users\Eric\Desktop\beeline.txt"
Ответ 2

Типичная ошибка в Windows из-за того, что пользовательским каталогом по умолчанию является C:\user\<your_user>, поэтому, когда вы хотите передать этот путь в качестве строкового аргумента в функцию Python, вы получаете ошибку Unicode только потому, что \u является экранированием в Unicode. Если следующие 8 символов после \u не являются числовыми, это приводит к ошибке.

To solve it, just double the backslashes: C:\\user\\<\your_user>...
This will ensure that Python treats the single backslashes as single backslashes.

Ответ 3

Prefixing with 'r' works very well, but it needs to be in the correct syntax. For example:

passwordFile = open(r'''C:\Users\Bob\SecretPasswordFile.txt''')

No need for \\ here - maintains readability and works well.

Ответ 4

With Python 3 I had this problem:

 self.path = 'T:\PythonScripts\Projects\Utilities'

produced this error:

 self.path = 'T:\PythonScripts\Projects\Utilities'
^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in
position 25-26: truncated \UXXXXXXXX escape

the fix that worked is:

 self.path = r'T:\PythonScripts\Projects\Utilities'

It seems the '\U' was producing an error and the 'r' preceding the string turns off the eight-character Unicode escape (for a raw string) which was failing. (This is a bit of an over-simplification, but it works if you don't care about unicode)

Hope this helps someone

python unicode python-3.x