将Unicode字符串(日语字符)作为命令行参数传递

3
我会问一下,有没有人知道如何在使用Python 2.7时将Unicode字符串(例如日文文件名)作为命令行参数传递给我的Python脚本。一旦这个文件名被正确地传递给函数/方法,一些文件处理将由某个引擎(一个被确定具有Unicode支持的DLL)完成(例如元数据提取/检索)。我尝试了以下方法,但不幸的是,Python崩溃了:
将文件名传递给将处理文件的方法:
processingMethod(unicode(argv[1], "utf-8", errors="ignore").encode("utf-8"))

关于这个方法,这是我解码传递的字符串的方式:

unicode(file_path).decode("utf-8")

任何反馈都将非常有帮助。非常感谢!

修正:processingMethod(unicode(argv[1], "utf-8", errors="ignore").encode("utf-8")) - jaysonpryde
我已经为您进行了编辑。将来请记住,您始终可以编辑自己的帖子。 - Adam Mihalcin
2
命令行参数由操作系统生成。您使用的是哪个操作系统? - Mark Ransom
1
unicode 上调用 .decode() 几乎肯定是错误的。 - Ignacio Vazquez-Abrams
1个回答

0

unicode(argv[1], "utf-8"

很不幸,Windows 命令提示符使用的编码永远不是 UTF-8。它是一种特定于区域设置的编码,因此您只能在安装了日语的 Windows 上传递日语字符作为参数。

如果您想要能够从 Python 2 可靠地读取参数中的 Unicode 字符,您需要嗅探以检测是否在 Windows 上运行,并使用 Windows 特定的 API 来读取 args,而不是依赖于区域编码的标准 C 库函数。请参见 this answer 以查看使用 ctypes 进行此操作的示例。

(*:好吧,除非您执行 chcp 65001,但这会导致许多其他问题,所以最好避免。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接