【问题标题】:c++ string UTF-8 encoding [duplicate]c ++字符串UTF-8编码[重复]
【发布时间】:2012-09-11 18:53:01
【问题描述】:

我是c++新手,想写一段很简单的代码,结果出错了,不知道怎么解决。

代码是:

#include <iostream>
#include <string>

using namespace std;

int main() {
    string test_string = "aáeéöôőüűč♥♦♣♠";
    cout << test_string << endl;
    return 0;
}

但结果是:a├íe├ę├Â├┤┼Ĺ├╝┼▒─ŹÔÖąÔÖŽÔÖúÔÖá

我在 Windows 上,使用 Code::Blocks。

【问题讨论】:

  • 结果并不像“意外”那样“错误”。您需要拓宽对环境的期望和理解。
  • 为我工作。您使用什么操作系统?编译器?源文件编码?
  • 祝你好运尝试在 Windows 控制台中显示 utf-8,请参阅:stackoverflow.com/questions/379240/… 您必须在运行程序之前更改代码页。
  • 我一直在做的——这可能是也可能不是你正在寻找的答案——是在一个工具中将字符串编码为 UTF-8 并将其作为转义码放入,字节为字节,如test_string = "a\xc3\xa1""e\xc3\xa9\xc3\xb6\xc3\xb4\xc5\x91\xc3\xbc\xc5\xb1\xc4\x8d\xe2\x99\xa5\xe2\x99\xa6\xe2\x99\xa3\xe2\x99\xa0"。这样,无论源代码文件的编码或任何语言环境设置如何,我都可以确定字符串是正确的 UTF-8。
  • 您是否仅限于标准 C++,还是愿意使用 Windows API?

标签: c++ windows string utf-8


【解决方案1】:

不幸的是,在 Windows 上使用 UTF-8 非常有问题。

在 Linux 上,您可以像这样简单地wstring

Does this code work universaly, or is it just my system?

但不幸的是,Windows 没有 UTF-8 语言环境,因此您只能使用 Windows API。

http://www.siao2.com/2007/01/03/1392379.aspx

【讨论】:

    【解决方案2】:

    将文件保存为不带 BOM 签名的 UTF-8,并尝试使用 printf()。

    //Save As UTF8 without BOM signature
    #include <stdio.h>
    #include <windows.h>
    
    int main() {
        SetConsoleOutputCP(65001);
        char test_string[] = "aáeéöôőüűč♥♦♣♠";
        printf(test_string);
        return 0;
    }
    

    结果是:aáeéöôőüűč♥♦♣♠

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 2016-09-22
      • 2011-06-17
      相关资源
      最近更新 更多