(Python 2.6)
我有一些代码可以根据客户端名称进行一些自定义。
它的作用是这样的:
custom_module = __import__("some.module.company_inc")
只要我们的客户拥有纯 ASCII 名称,此方法就可以正常工作。
我想让这段代码也能对非 ASCII 公司名称正常工作,例如
custom_module = __import__(u"some.module.unicóde_company_inc")
但是,__import__
只接受字节,所以我需要先对其进行编码。
__import__(u"some.module.unicóde_company_inc".encode(sys.getfilesystemencoding())
是否保证在所有系统上工作(当然假设文件系统编码支持“ó”)?这是执行此操作的正确方法吗?(假设我不静态地知道该框使用的编码)
我对linux系统最感兴趣。 (但如果了解非 Linux 系统也很好)
最佳答案
严格来说,有可能 sys.getfilesystemencoding()
在某些情况下(例如,如果未设置 LANG
),可以返回 None
。因此,回退到“utf-8”可能会更安全一些,以允许这种(不太可能)的可能性:
encoding = sys.getfilesystemencoding() or 'utf-8'
这将覆盖 99.9% 的情况。对于其余的,我只允许应用程序引发异常(因为这正是它的本质),然后使用适当的信息性错误消息优雅地退出。
关于python - 在 Python 2 中安全导入具有 Unicode 名称的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32999307/