2013-05-10 79 views
2

getenv用於訪問Mac OS X和Linux上的環境變量,它需要char*作爲輸入。這是否意味着我不能在這些系統上的這些環境變量中存儲UNICODE字符串作爲值?getenv - Mac OS X和Linux上的環境變量

在Windows GetEnvironmentVariable等中,返回可以容納UTF16字符串的寬字符串。

+0

或getenv返回的字符串的編碼是什麼? UTF8? – 2013-05-10 09:11:40

+1

對於環境變量值,POSIX規範有這種說法:「可以分配環境變量的值不受限制,只是它們被認爲以空字節結尾,而且用於存儲環境的總空間和參數該進程僅限於{ARG_MAX}字節。「所以UTF8在某種意義上應該是可以的。但它也表示:「對於符合IEEE標準1003.1-2001的系統移植值,值應由便攜字符集中的字符組成(NUL除外,如下所示)」 – 2013-05-10 09:19:22

+0

爲了確切的目的,你想要有一個UTF-8字符串的環境變量? – 2013-05-10 09:29:31

回答

0

當時,Unix系統並沒有在腦海中出現。所以不可能創建寬字符串環境變量或讀取它們。
對於Windows,C-Runtime wchar_t *_wgetenv(const wchar_t *varname);作爲擴展,但這不會給你在Unix系統上太多的用處。

0

在當前的Linux(也可能是MacOSX)上,UTF-8編碼字符串非常常見。 (但也有例外,請參閱locale命令等)。

由於Michael Burr評論,你可能會認爲getenv正在返回一個UTF-8字符串。但是如果你想要最大的可移植性,只能在環境變量中使用ASCII。

從C或C++程序員的角度來看,getenv(3)返回char *,您可能想要使用UTF-8相關函數來處理它。請注意0​​不會返回wchar_t*指針。

locale(7)手冊頁,並注意當前的區域可以通過環境變量,如LANGLC_ALL定義,等...查看environ(7)