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