首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fopen()或open()使用什么字符编码?

问fopen()或open()使用什么字符编码?
EN

Stack Overflow用户
提问于 2018-06-11 03:37:18
回答 1查看 951关注 0票数 2

当使用像fopen()这样的函数时,必须为文件名传递一个字符串参数。我想知道这个字符串的字符编码应该是什么。

这个问题已经被here问过了,但是它有矛盾的答案。答案如下:

这取决于系统区域设置。查看"locale“命令的输出。如果变量以UTF-8结尾,那么您的区域设置为UTF-8。大多数现代线将使用UTF-8。虽然Andrew在技术上是正确的,它只是一个字节字符串,但是如果您不匹配系统区域设置,一些程序可能无法正确工作,并且不可能获得正确的用户输入等等。最好坚持使用UTF-8。

另一个答案是:

Linux上的文件系统调用与编码无关,也就是说,它们不知道特定的编码。就它们而言,文件名参数指向的字节字符串按原样传递到文件系统。文件系统期望文件名是正确的编码(通常是UTF-8,正如Matthew提到的那样)。 这意味着您通常不需要做任何事情(文件名被视为不透明的字节字符串),但这实际上取决于您从何处接收到的文件名,以及是否需要以任何方式操作文件名。

哪个答案是正确的?

EN

回答 1

Stack Overflow用户

发布于 2018-06-11 05:36:28

在某些方面他们都是正确的。

传递给文件系统调用的字符串是一个字节字符串,一个空字节表示字符串的结束,“/”用于分隔路径组件。在文件名段中,字节的含义对文件系统来说并不重要--它们只是一个字节序列。

形成文件名的字节的显示方式取决于用于显示它们的设备。如果名称使用带有非ASCII字符的UTF-8,则使用ISO8859-15(或8859-1用于美国不妥协的居民)打印该数据会产生胡言乱语,通常包括来自0x80字节范围的C1控制字节。0x9F.如果名称使用8859-15和非ASCII字符,则会出现无效的UTF-8序列,您将得到难以识别或无意义的数据显示(问号,或其他无效UTF-8序列的指示)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50790217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档