路径中非ASCII字符的问题(Python)

时间:2014-04-10 15:56:01

标签: python unicode encoding

我正在编写一个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 :(得分: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