我有一个用C ++编写的Windows应用程序。在这里我们用来检查文件名是unicode还是不使用wcstombs()函数。如果转换失败,我们假设它是unicode文件名。同样,当我在Linux中尝试相同时,转换不会失败。我知道在Windows中,默认的字符集是LATIN,而Linux的默认字符集是UTF8。根据文件名是否为unicode,我们有不同的编码集。由于我无法在Linux中弄清楚,我无法使我的应用程序可移植到Unicode字符。有没有其他的工作或我做错了什么?
答案 0 :(得分:5)
utf-8具有很好的属性,所有ascii字符都表示为ascii,所有非ascii字符都表示为two or more bytes >=128的序列。所以你需要检查的是ascii是无符号字节的数值大小。如果> = 128,那么非ascii,其中utf-8作为基本编码意味着“unicode”(即使在latin-1的范围内,并注意latin-1是unicode的正确子集,构成第一个256个代码点)。
但是请注意,在Windows中,文件名是字符序列,在* nix中,它是字节序列。
理想情况下,您应该忽略这些字节可能编码的内容。 尽管,可能很难与天真的用户观点相协调