Python没有打开日文文件名

时间:2010-06-22 01:49:44

标签: python windows unicode file-io

我一直在研究一个python脚本来打开一个带有unicode名称的文件(主要是日语)并保存到Windows Vista 64位中随机生成的(非unicode)文件名,我遇到了问题...它只是不起作用,它与非unicode文件名(即使它有unicode内容)工作正常,但第二次尝试传递unicode文件名 - 它不起作用。
这是代码:

try:
    import sys, os
    inpath = sys.argv[1]
    outpath = sys.argv[2]
    filein = open(inpath, "rb")
    contents = filein.read()
    fileSave = open(outpath, "wb")
    fileSave.write(contents)
    fileSave.close()

    testfile = open(outpath + '.test', 'wb')
    testfile.write(inpath)
    testfile.close()

except:
    errlog = open('G:\\log.txt', 'w')
    errlog.write(str(sys.exc_info()))
    errlog.close()



错误:

(<type 'exceptions.IOError'>, IOError(2, 'No such file or directory'), <traceback object at 0x01092A30>)

2 个答案:

答案 0 :(得分:3)

您必须将inpath转换为unicode,如下所示:

inpath = sys.argv[1]
inpath = inpath.decode("UTF-8")
filein = open(inpath, "rb")

我猜你正在使用Python 2.6,因为在Python 3中,默认情况下所有字符串都是unicode,所以这个问题不会发生。

答案 1 :(得分:1)

我的猜测是sys.argv 1和sys.argv [2]只是字节数组,不支持本机Unicode。您可以通过打印它们并查看它们是否是您期望的角色来确认这一点。您还应该打印type(sys.argv 1)以确保它们的类型正确。

命令行参数来自哪里?它们来自其他程序还是您在命令行中键入它们?如果它们来自另一个程序,你可以让另一个程序将它们编码为UTF-8,然后让你的Python程序从UTF-8解码它们。

您使用的是哪个版本的Python?

编辑:这是一个强大的解决方案:http://code.activestate.com/recipes/572200/