Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux/Unix:主目录中的非ascii字符?_C_Linux_Unicode - Fatal编程技术网

Linux/Unix:主目录中的非ascii字符?

Linux/Unix:主目录中的非ascii字符?,c,linux,unicode,C,Linux,Unicode,我在C中使用getenv(“HOME”)获取用户的主目录,以便读取/写入设置文件。但是主目录文件名是否可能包含不能表示为8位字符的字符?(例如,unicode或UTF-8编码) 对于不同种类的Linux和*BSD,这是否有所不同 先谢谢你 是的,字符串可能是UTF-8;但是,$HOME的值必须是有效的UTF-8字符串,并且该字符串将只包含完整的有效UTF-8字符。注意,UTF-8只是使用了大部分(但不是全部;它省略了0xC0、0xC1、0xF5..0xFF)可能的8位字符值。这意味着你不必太担心

我在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字符的主目录变得或多或少困难


另请参见:

是的,字符串可能是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字符的主目录变得或多或少困难


另请参见:

何处要求$HOME为UTF-8而不是ISO-8859-1?Unix系统通常不会对文件名的字符集施加任何要求,只要“/”和“\0”与ASCII中的意思相同。不要求它是UTF-8,但可能是UTF-8,不会出现任何问题。另请参见:非常好的答案,谢谢。我担心的是,宽字符会被强制转换为ascii码——如果在Windows中使用SHGetFolderPathA来获取用户的home dir,这种情况就会发生。为什么要求$home是UTF-8而不是ISO-8859-1?Unix系统通常不会对文件名的字符集施加任何要求,只要“/”和“\0”与ASCII中的意思相同。不要求它是UTF-8,但可能是UTF-8,不会出现任何问题。另请参见:非常好的答案,谢谢。我担心的是,宽字符会被强制转换为ascii码——如果使用SHGetFolderPathA获取用户的home dir,这种情况会在Windows中发生。UTF-8的整个要点是使Unicode字符适合
字符*
!是的,它适合,但我仍然需要知道(在某些情况下)一个字节一个字符。UTF-8的整个要点是使Unicode字符适合
字符*
!是的,它适合,但我仍然需要知道(在某些情况下)一个字节一个字符。