编写Windows文件路径时出现Unicode错误'unicodeescape'编码无法解码字节...
我在一台运行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"