0
#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>@ 在 Eclipse 中在一个真实的程序中(我什至不知道谁在哪里做什么,但我想有人确实弄乱了语言环境)
  • ??????如果我不调用语言环境
  • str 在 Eclipse Watch 窗口中显示为 Details:0x400960 L"\320\237\320\276\321\200\321\217\320\264\320\276\320\272"
  • 在 Eclipse 内存窗口中显示为仅 ASCII字节字符(并且无法指定这是 UTF-32 字符串)

我相信这是 Eclipse 控制台或程序中的错误配置,因为例如,其他人只是在 Eclipse 中运行我的代码,他们确实看到了正确的输出

有人能解释一下这种混乱吗?设置所有部分(操作系统、gcc、终端、Eclipse、源...)以输出存储在 UTF-32 wchar_t 字符串中的国际符号的正确方法是什么?

附带说明一下,当我们拥有 UTF-32 时,我为什么还要关心所有这些,这足以知道里面有什么......

4

1 回答 1

0

原来是其他代码更改了语言环境。

于 2012-11-09T18:50:11.287 回答