我在 C 中使用 getenv("HOME") 来获取用户的主目录,以便读/写设置文件。但是主目录文件名是否可能包含不能表示为 8 位字符的字符? (例如,unicode 或 UTF-8 编码)
这对于各种 Linux 和 *BSD 有什么不同吗?
提前致谢...
最佳答案
是的,字符串可能是 UTF-8;但是,$HOME 的值必须是有效的 UTF-8 字符串,并且该字符串将仅包含完整的有效 UTF-8 字符。请注意,UTF-8 仅使用大部分(但不是全部;它省略了 0xC0、0xC1、0xF5..0xFF)可能的 8 位字符值。这意味着除非你愿意,否则你不必太担心它。特别是,UTF-8只用一个零字节来表示U+0000,相当于ASCII NUL或'\0'
,被编码成一个字节(值为0)。
结论不会因平台而异;不同的系统可能或多或少地难以创建需要非 ASCII UTF-8 字符的主目录。
另请参阅:SO 164430
关于c - Linux/Unix : Non-ascii characters in home directory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1906203/