我必须使用区域设置格式在c++程序中显示一些货币值。对于en_US
或tr_TR
这样的区域设置,一切都很正常。然而,在pl_PL
和cs_CZ
中,结果如下:1�235,45 zł
。我试图用thousands_sep()
方法识别这个神秘的字符,结果表明这个字符代码是8239
,这很荒谬,因为它指的是汉字船.是应该是这样,还是我的终端有问题?顺便说一下,我正在使用Manjaro Linux。
这帮助我解决了问题:如何在Linux/OSX上打印wstring?
正如Hans Passant所指出的,这个奇怪的字符是一个狭窄的非中断空间,当我试图在终端中打印它时,我遇到了一个问题。根据上面链接的答案,我在程序的开头放了std::setlocale(LC_ALL, "")
,这很有帮助——现在所有狭窄的非中断空格以及其他unicode字符都可以使用std::cout
和std::wcout
正确打印。