【问题标题】:Python: How to handle unicode in env variable in windowsPython:如何在 Windows 中处理 env 变量中的 unicode
【发布时间】:2017-01-20 10:46:00
【问题描述】:

我想在新生成的进程中传递我现有应用程序日志文件目录位置的自定义环境变量,现在的问题是用户目录路径可能包含 unicode,取决于用户的语言环境(它可以是 latin- 1)

# This Works fine if all the characters are ascii
self.app_log_dir = u'C:\\USERS_CUSTOM_PATCH\\logs\\'

env['APP_LOG_DIR'] = self.app_log_dir 

    p = Popen(
                    cmd, close_fds=False, env=env, stdout=stdout.fileno(),
                    stderr=stderr.fileno(), stdin=stdin.fileno(),
                    creationflags=(CREATE_NEW_PROCESS_GROUP | DETACHED_PROCESS)
                )

p.start()

##############################

# But path like this fails
self.app_log_dir = u'C:\\USERS_CUSTOM_PATCH\\xx_ÔÔ_xx\\logs\\'
...
...
p.start()

下面是我从上面的非 ascii 路径中收到的异常,

例外:环境只能包含字符串

由于我需要在我的应用程序中处理非 ascii 路径,任何人都可以建议解决方法吗?

更新:

pp_log_dir 变量可由用户配置,我正在对我的代码进行单元测试并发现问题,因为用户可以在 config.py 文件中提供任何路径

【问题讨论】:

  • "Unicode 路径" 根本没有任何意义。磁盘上的文件路径必须为字节。如果您的路径是 latin-1,那么您当然应该使用以 latin-1 编码的字节串。
  • @DanielRoseman app_log_dir 变量可由用户配置,我正在对我的代码进行单元测试并发现问题,因为用户可以在 config.py 文件中提供任何路径

标签: python python-2.7 python-3.x subprocess


【解决方案1】:

如果用户提供的是 unicode 路径,请将其编码为相关编码。

env['APP_LOG_DIR'] = self.app_log_dir.encode('latin-1')

【讨论】:

  • 剩下的问题是,相关的编码是什么?你会去locale.getpreferredencoding吗?
猜你喜欢
  • 2020-10-29
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多