2

我有一个用 C++ 编写的 Windows 应用程序。在此,我们使用 wcstombs() 函数检查文件名是否为 unicode。如果转换失败,我们假设它是 unicode 文件名。同样,当我在 Linux 中尝试相同时,转换不会失败。我知道在 Windows 中,默认字符集是 LATIN,而 Linux 的默认字符集是 UTF8。根据文件名是否为 unicode,我们有不同的编码集。由于我无法在 Linux 中弄清楚,我无法使我的应用程序可移植到 Unicode 字符。有没有其他解决方法或者我做错了什么?

4

1 回答 1

5

utf-8 有一个很好的属性,即所有 ascii 字符都表示为 ascii,所有非 ascii 字符表示为两个或多个字节的序列 >=128。所以你只需要检查 ascii 就是无符号字节的数值大小。if >=128,则非ascii,以utf-8为基本编码表示“unicode”(即使在latin-1范围内,注意latin-1是unicode的真子集,构成前256码点)。


但是,请注意,虽然在 Windows 中文件名是一个字符序列,但在 *nix 中它是一个字节序列

因此,理想情况下,您应该真正忽略这些字节可能编码的内容。

可能很难与天真的用户的观点相协调,尽管

于 2013-03-26T12:33:38.797 回答