2009-12-15 21 views
1

我在C中使用getenv(「HOME」)來獲取用戶的主目錄以讀取/寫入設置文件。但有可能主目錄的文件名可能包含不能表示爲8位字符的字符? (例如,unicode或UTF-8編碼)Linux/Unix:主目錄中的非ASCII字符?

對於各種Linux和* BSD,這是否有所不同?

在此先感謝...

+0

UTF的整點 - ** ** 8是使Unicode字符放入一個'字符*'! – MSalters 2009-12-15 10:12:00

+0

是的,它適合,但我仍然需要知道(在某些情況下)一個字節!=一個字符。 – 2009-12-15 10:31:03

回答

1

是的,這是可能的字符串可以爲UTF-8;但是,$ HOME的值必須是有效的UTF-8字符串,並且該字符串將只包含完整的有效UTF-8字符。請注意,UTF-8只使用可能的8位字符值中的大部分(但不是全部;它省略了0xC0,0xC1,0xF5..0xFF)。這意味着除非你願意,否則你不必擔心。特別是,UTF-8只使用一個零字節來表示U + 0000,它相當於ASCII NUL或'\0',並被編碼爲一個字節(值爲0)。

結論並不因平臺而異;不同的系統可能會使創建需要非ASCII UTF-8字符的主目錄或多或少困難。

參見:SO 164430

+0

這個要求來自何處,$ HOME是UTF-8而不是ISO-8859-1?一般來說,Unix系統對文件名的字符集沒有任何要求,只要'/'和'\ 0'的含義與ASCII中的相同。 – 2009-12-15 10:03:44

+0

沒有要求它是UTF-8 - 但它可以是UTF-8,它不會出現問題。另見:http://stackoverflow.com/questions/164430/why-is-it-that-utf-8-encoding-is-used-when-interacting-with-a-unix-linux-environm/164447#164447 – 2009-12-15 10:06:03

+0

很好的答案,謝謝。我擔心的是,寬字符會被強制轉換爲ascii - 如果使用SHGetFolderPathA來獲取用戶的主目錄,則會發生在Windows中。 – 2009-12-15 10:39:09