我有一个用 C++ 编写的 Windows 应用程序。在此我们使用 wcstombs() 函数检查文件名是否为 unicode。如果转换失败,我们假设它是 unicode 文件名。同样,当我在 Linux 中尝试相同的操作时,转换不会失败。我知道在 Windows 中,默认字符集是 LATIN,而 Linux 的默认字符集是 UTF8。根据文件名是否为 unicode,我们有不同的编码集。因为我无法在 Linux 中弄明白,所以我无法使我的应用程序可移植到 Unicode 字符。是否有任何其他解决方法,或者我做错了什么?
最佳答案
utf-8 有一个很好的特性,所有 ascii 字符都表示为 ascii,所有非 ascii 字符都表示为 two or more bytes >=128 的序列。 .所以你所要检查的 ascii 是无符号字节的数值大小。如果>=128,则非ascii,以utf-8为基本编码表示“unicode”(即使在latin-1范围内,注意latin-1是unicode的一个适当子集,构成前256代码点)。
但是,请注意,虽然在 Windows 中文件名是一个字符序列,但在 *nix 中它是一个字节序列。
因此理想情况下,您应该真正忽略这些字节可能编码的内容。
不过,可能很难与天真的用户的观点相协调
关于c++ - 如何在 Linux 中检测 unicode 文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15637097/