c++ - 如何在 Linux 中检测 unicode 文件名

标签 c++ unicode

我有一个用 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/

相关文章:

c++ - std::atomic::load 如何实现

perl - 使用 'use utf8;' 给我 'Wide character in print'

python - 无法使用Python的PyCDC.DrawText()绘制Unicode字符

C++ Win API 函数 'not declared in this scope'

c++ - 使用 MPI 散布成对的 C++ vector

c# - 使用按位运算从 int 日期中提取月份 (yyyyMMdd)

c# - 使用 PostMessage 发送 Unicode 字符

python - 如何正确地将unicode字符写入文件

python - requests.get 返回 403 而相同的 url 在浏览器中工作

c++ - 自动生成基于成员的操作?