UTF8注入的标准流的UTF8字符不完整

时间:2018-09-03 20:45:18

标签: c++ utf-8 locale outputstream

我最近有一个奇怪的bugreport

问题是以下代码在某些计算机上生成了不完整的UTF8字符:

#include <iostream>
#include <sstream>

int main() {
        std::cout.imbue(std::locale("fr_FR.UTF-8"));
        std::cout << 1337;
}

在我的机器上,此输出为“ 1 337”或十六进制(通过hexdump)为“ 2031 3333 0037”。但是在有错误的人的机器上,十六进制输出为“ e231 3333 0037”。

“ e2”是zero width non joiner的开始,在UTF-8中是e2 80 af

这怎么可能?据我了解,特殊字符是比常规空格更好的数字分隔符,但是为什么C ++(?)无法完全打印出来呢?

十六进制输出由./a.out | hexdump收集,因此控制台编码无关紧要。

0 个答案:

没有答案