我找不到正确的方法来获取 python 中 appdata 路径的环境变量。
问题是我的用户名包含特殊字符(德语 ae 和 ue)。
我为 Vista 和 Windows 7 使用 PyQt 做了一个解决方法,但它不适用于 XP 系统。
有谁知道这些环境变量的正确编码或此问题的其他解决方案?
正如迈克所说,您可以从以下位置获取系统代码页getfilesystemencoding
。此编码用于将 Windows 的本机 Unicode 字符串转换为 Python 使用的所有 C stdio 函数的字节,包括使用字节字符串文件路径的文件系统调用,以及os.environ
.
这意味着您将能够读取包含非 ASCII 字符的字符串os.environ
并直接将其用作文件路径,无需任何特殊的编码/解码步骤。
不幸的是,如果%APPDATA%
变量包含系统代码页中不存在的 Unicode 字符 — 例如,如果在德语 (cp1252) Windows 安装上,您的路径是C:\Documents and Settings\αβγ\Application Data
——那么在你有机会使用它们之前,这些角色就已经被破坏了。在这种情况下,使用文件系统编码将得到的字节字符串解码为 Unicode 将无济于事。
您可以在具有以下功能的最新 Python 版本上使用以下函数ctypes
扩展,读取 Windows 本机 Unicode 环境变量。
def getEnvironmentVariable(name):
name= unicode(name) # make sure string argument is unicode
n= ctypes.windll.kernel32.GetEnvironmentVariableW(name, None, 0)
if n==0:
return None
buf= ctypes.create_unicode_buffer(u'\0'*n)
ctypes.windll.kernel32.GetEnvironmentVariableW(name, buf, n)
return buf.value
在 Python 3 中,os.environ
字典包含直接从 Windows 获取的 Unicode 字符串,没有代码页编码,因此您不必担心这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)