繁体   English   中英

C ++文件字符编码

[英]C++ File character encoding

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

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

如果具有UTF-8,并且您输出到要求ISO 8859-1的Window,则它将无法正常工作。 如果您具有UTF-8(如果全局语言环境仍然是默认的"C" ,就会是这种情况),则可以将窗口更改为代码页65001,或者必须在输出之前转换编码。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM