我一直在研究一个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>)
答案 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/