我正在编写一个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])
(摘录)
这使程序崩溃,声称没有声明编码。如何声明编码?
答案 0 :(得分:1)
src=os.path.normpath(u'C:\users\Mårten\python\nonpython')
这不是有效的字符串语法。反斜杠在字符串文字中具有特殊含义,因此如果要使用文字反斜杠,则需要将其转义:
src=os.path.normpath(u'C:\\users\\Mårten\\python\\nonpython')
(不幸的是'原始字符串'r''
文字在这里是不可用的,因为\u
在原始unicode字符串中仍然是特殊的不幸设计决定。嘘。)
同样@ 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')
答案 1 :(得分:0)
你需要一个神奇的评论。见PEP 0263