【发布时间】:2014-09-11 05:05:18
【问题描述】:
我一直在尝试使用 C++ 在带有 BOM 的 UTF8 和 UTF16 LE 之间进行转换,以使字符在 Windows 上正确输出,而无需更改终端的字体。
我尝试更改代码页,但没有成功。
我有 2 个问题,
- 如何将普通字符串转换为宽字符串?
- 创建一个将每个 unicode 字符映射到 Windows 代码页中的字符的 C++ 映射是不是一个坏主意?
例如,
wcout << L"\u00A0" << endl;
当使用代码页 850 时,此代码在 Windows 上输出字母 á。如何在 Windows 上将变量替换为 "\u00A0" 以将普通字符串转换为宽字符?
我想要的是这个:
wcout << Lsome_variable << endl;
我意识到这不是有效的 c++ 语法,但有人知道我该怎么做吗?或者有没有更好的方法?
【问题讨论】:
-
一直使用宽字符串。
_setmode用于标准流。 -
@Cheersandhth.-Alf:最好在任何地方使用 UTF-8,除了强制 UTF-16 的 WINAPI 调用。宽不宽! UTF-8 Everywhere Manifesto
-
@Deduplicator:由于windows平台上的主编译器visual c++不支持utf-8字面量,而且由于windows控制台子系统不支持utf-8输入,所以就傻了"到处使用 utf-8”。对不起。但就是这样
-
@Deduplicator:我认为你的热情论证的狂热从你的陈述中得到了很好的说明“你既没有链接到也没有提供任何论据来证明在所有情况下都会变得更好”,其中( 1) 忽略所提供的事实,以及 (2) 误导性地引入一个稻草人来反驳。这不是工程师的论点。这是一个狂热分子,或巨魔。