C ++文件字符编码

时间:2013-06-17 10:14:10

标签: c++ encoding utf-8 character-encoding codepages

好的,所以我正在尝试使用C ++(Visual Studio 2012 Express)在W8下读取带有重音符号(法语)的json格式文本文件。

这是文件:

    {"products": [{"id": 125, "label": "Billél"}, {"id": 4, "label": "Rùbin"}]}

一行,以UTF-8(无BOM)编码,保存为D:/p.txt

这是C ++中的阅读代码:

    std::ifstream in("D:/p.txt", std::ios::binary | std::ios::in);
    std::string content( (std::istreambuf_iterator<char>(in) ), (std::istreambuf_iterator<char>()    ) );

我得到的输出:

    {"products": [{"id": 125, "label": "Bill├®l"}, {"id": 4, "label": "R├╣bin"}]}

尝试使用CharToOemA

   {"products": [{"id": 125, "label": "Billél"}, {"id": 4, "label": "Rùbin"}]}

我的代码页应该允许我在控制台中显示重音(我尝试回显这样的重音,这产生了非常好的显示)。我的c ++控制台的输入和输出代码页都是CP850(IBM Internatinal Latin-1)。

如何让我的代码在控制台中输出正确的重音?如果可能,我最终需要一个跨平台的解决方案。

2 个答案:

答案 0 :(得分:0)

如果有UTF-8,则输出到期望ISO 8859-1的Window, 它不会起作用。如果你有UTF-8(将是 如果全局语言环境仍然是默认的"C"),那么你 可以将窗口更改为代码页65001,或者您必须 在输出之前转换编码。

关于可移植性,没有真正的解决方案;你是什​​么 必须做的取决于目标如何解释字节 你输出。在Windows下,您可以更改代码页;下 Unix系统(X Windows),它是字体的编码 窗口使用哪些重要。在这两种情况下,它们可以是不同的 对于同一台机器上的不同窗口。

答案 1 :(得分:0)

您是否尝试过将chcp 65001用于将代码页切换为UTF-8 according to MSDN。另请注意,默认控制台字体可能无法显示所有UTF8字形,我建议改为使用Lucida Console