getenv
用于访问 Mac OS X 和 Linux 上的环境变量,它char*
作为输入。这是否意味着我不能将 UNICODE 字符串作为值存储在这些系统上的这些环境变量中?
在 WindowsGetEnvironmentVariable
等上,返回可以容纳 UTF16 字符串的宽字符串。
getenv
用于访问 Mac OS X 和 Linux 上的环境变量,它char*
作为输入。这是否意味着我不能将 UNICODE 字符串作为值存储在这些系统上的这些环境变量中?
在 WindowsGetEnvironmentVariable
等上,返回可以容纳 UTF16 字符串的宽字符串。
在当前的 Linux(可能还有 MacOSX)上,UTF-8编码的字符串非常常见。(但也有例外,请参阅locale
命令等...)。
正如Michael Burr评论的那样,您可以假设它getenv
返回一个 UTF-8 字符串。但是,如果您想要最大的可移植性,请仅在环境变量中使用 ASCII。
从 C 或 C++ 程序员的角度来看,getenv(3)返回 a char *
,您可能希望使用 UTF-8 相关函数来处理它。请注意,getenv
它不返回wchar_t*
指针。
请参阅locale(7)手册页并注意当前语言环境可以由环境变量定义,如LANG
,LC_ALL
等...请参阅environ(7)。
那时,Unix 系统的发明并没有考虑到宽字符串。所以不可能创建宽字符串环境变量或读取它们。
对于 Windows,有 C-Runtime 的扩展wchar_t *_wgetenv( const wchar_t *varname );
,但这在 Unix 系统上不会给你太多用处。