【发布时间】:2018-06-11 03:37:18
【问题描述】:
当您使用像fopen() 这样的函数时,您必须将文件名的字符串参数传递给它。我想知道这个字符串的字符编码应该是什么。
这个问题已经被问过here,但它有矛盾的答案。一个答案如下:
这取决于系统区域设置。查看“语言环境”的输出 命令。如果变量以 UTF-8 结尾,那么您的语言环境是 UTF-8。 大多数现代 linux 将使用 UTF-8。虽然安德鲁是正确的 从技术上讲,它只是一个字节字符串,如果你不匹配 系统语言环境 某些程序可能无法正常工作,它会 无法获得正确的用户输入等。最好坚持 UTF-8。
而另一个答案如下:
Linux 上的文件系统调用与编码无关,即它们不 (需要)了解特定的编码。就他们而言 有关,文件名参数指向的字节串是 按原样传递给文件系统。文件系统期望 文件名采用正确的编码(通常是 UTF-8,如前所述 马修·塔尔伯特)。
这意味着您通常不需要做任何事情(文件名是 视为不透明的字节字符串),但这实际上取决于您在哪里 接收文件名,以及是否需要操作 任何方式的文件名。
哪个答案是正确的?
【问题讨论】:
-
您引用的第一个答案显然是错误的。它不依赖于“系统语言环境”。一开始就没有系统语言环境之类的东西。只有用户区域设置。
标签: c linux character-encoding