路径中非ASCII字符的问题(Python)
我正在写一个Python程序,这个程序除了其他功能外,还需要移动一些文件。路径中的一个文件夹名字里有一个非ASCII字符:
src=os.path.normpath(u'C:\users\Mårten\python\nonpython')
dest=os.path.normpath(u'C:\users\Mårten\python\target')
files=getspc(src)
for mfile in files:
print "In the loop"
oldpath=os.path.normpath(os.path.join(src,mfile))
print "oldpath: ", oldpath
newpath=os.path.normpath(os.path.join(dest,mfile))
print "newpath", newpath
os.rename(oldpath,newpath)
with dbcon:
cur.execute("INSERT INTO spectra VALUES (?, CURRENT_DATE)",[newpath])
(摘录)
这导致程序崩溃,提示说没有声明编码。那怎么才能声明编码呢?
2 个回答
0
你需要一个神奇的注释。可以看看这个链接:PEP 0263
1
src=os.path.normpath(u'C:\users\Mårten\python\nonpython')
这段代码的字符串写法是不对的。反斜杠在字符串中有特殊的含义,所以如果你想在字符串里用一个普通的反斜杠,就需要用两个反斜杠来表示:
src=os.path.normpath(u'C:\\users\\Mårten\\python\\nonpython')
(不幸的是,‘原始字符串’ r''
在这里不能用,因为设计上有个不太好的决定,就是在原始的 Unicode 字符串中 \u
仍然是特殊的。真让人失望。)
另外,正如 @user58697 所说,如果你想在代码中使用非 ASCII 字符,你必须在文件顶部加一行 # encoding: something
。这里的 something
是你告诉文本编辑器用什么编码来保存文件的——我建议用 UTF-8。Unicode 不是一种编码。(除了某些 Windows 编辑器,它们误用“Unicode”来指代 UTF-16LE。你不想保存为 UTF-16,因为它不兼容 ASCII。)
另外,你也可以通过使用前面提到的反斜杠转义来表示非 ASCII 字符,从而避免这个问题:
src=os.path.normpath(u'C:\\users\\M\u00E5rten\\python\\nonpython')