2

好的,所以我正在尝试使用 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)。

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

4

2 回答 2

0

如果有 UTF-8,并且你输出到一个期望 ISO 8859-1 的窗口,它就不会工作。如果您有 UTF-8(如果全局语言环境仍然是默认的情况下就是这种情况"C"),那么您可以将窗口更改为代码页 65001,或者您必须在输出前转换编码。

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

于 2013-06-17T10:18:47.523 回答
0

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

于 2013-06-17T10:18:56.443 回答