编写Windows文件路径时出现Unicode错误'unicodeescape'编码无法解码字节...

437 投票
10 回答
1519635 浏览
提问于 2025-04-15 13:56

我在一台运行Windows 7的电脑上使用Python 3.1,系统的默认语言是俄语,默认编码是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文件夹里试了一下。结果还是没有成功。有没有什么建议?

10 个回答

35

在字符串前加上 'r' 是个不错的做法,但要确保语法正确。比如:

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

这里不需要用 \\,这样更容易读懂,而且效果很好。

50

在Windows系统上,常见的错误是因为默认的用户目录是 C:\user\<your_user>。当你想把这个路径作为字符串传递给Python函数时,就会出现Unicode错误。这是因为 \u 是一个Unicode转义字符。如果 \u 后面的8个字符不是数字,就会导致错误。

解决这个问题的方法很简单,就是把反斜杠(\)加倍: C:\\user\\<\your_user>...。这样可以确保Python把单个反斜杠当作单个反斜杠来处理。

1003

问题出在这个字符串上

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

撰写回答