国际UTF-32字符串输出到Linux中的控制台

时间:2011-12-23 07:27:31

标签: c++ linux eclipse-cdt utf-32

#include <stdio.h>
#include <iostream>
#include <locale>

int main()
{
    const wchar_t *str = L"\u041F\u043E\u0440\u044F\u0434\u043E\u043A";
    std::locale::global(std::locale(""));
    std::wcout << str << std::endl;
}

这是一段以UTF-32 wchar_t字符串输出俄语短语的代码:

  • 从Ubuntu 11.10中的UTF-8 gnome终端运行时正确的:Порядок
  • 如上所述,在Eclipse中
  • РџРѕСЂСЏРґРѕРє
  • 45 = B8D8:0B&gt; @在Eclipse中的真实程序中(我甚至不知道谁在做什么,在哪里,但我想有人会搞乱语言环境)
  • ???????如果我不调用locale
  • str显示为详细信息:0x400960 L“\ 320 \ 237 \ 320 \ 276 \ 321 \ 200 \ 321 \ 217 \ 320 \ 264 \ 320 \ 276 \ 320 \ 272”在Eclipse Watch窗口中
  • 在Eclipse内存窗口中显示为仅ASCII 字节字符(并且无法指定这是UTF-32字符串)

我认为这是eclipse控制台或程序中的错误配置,因为,例如,其他只在Eclipse中运行我的代码的人他们see正确output

有人可以解释这种混乱吗?设置所有部分(OS,gcc,终端,Eclipse,源......)以输出以UTF-32 wchar_t字符串存储的国际符号的正确方法是什么?

作为旁注,当我们拥有UTF-32时,为什么还要关心这一切呢?这应该足以让我们知道里面是什么......

1 个答案:

答案 0 :(得分:0)

事实证明,其他代码更改了区域设置。