"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:
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)