【问题标题】:International UTF-32 strings output to console in Linux国际 UTF-32 字符串输出到 Linux 中的控制台
【发布时间】:2012-01-26 15:42:19
【问题描述】:
#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 中运行我的代码,他们执行see 正确的output

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

顺便说一句,当我们有 UTF-32 时,我为什么还要关心这一切,这足以知道里面有什么......

【问题讨论】:

  • 您可以尝试更新您的“运行配置”>Common>编码并选择正确的编码(在我的情况下,“UTF8”似乎可以解决问题)一些细节here
  • 没有解决所有问题(实际上还没有尝试过解决方案)但看起来不错。
  • 没关系!不过,请试一试。与“运行配置”下的编码选项类似,“调试配置”>“通用”>“编码”下也有一个。也许您可以适当地设置这两种配置并看看它是否有帮助
  • 是的,这对上面的小测试程序有帮助,但对真正的测试程序没有帮助。必须找出那里出了什么问题。仍然 Eclipse 在其内存/手表中不理解 UTF-32;但可能是因为旧版本(helios)。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-11-26
    • 2011-05-16
    • 2013-10-30
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多