为什么std::wcout << L"ي" << std::endl;
无法打印实际角色?
#include <iostream>
#include <locale>
int main()
{
std::locale::global (std::locale ("en_US.UTF-8"));
std::cout << "ي" << std::endl;
std::wcout << L"ي" << std::endl;
}
DEMO 我定义了一个合适的语言环境,但它仍然无法正常工作
答案 0 :(得分:2)
该错误混合了std::cout
和std::wcout
:
27.4标准iostream对象
[iostream.objects]
27.4.1概述
[iostream.objects.overview]
3对相应的宽字符和窄字符流的混合操作遵循相同的语义 根据ISO C标准的修订1中的规定,在FILE上混合这些操作。
7.21.2 Streams
4每个流都有一个方向。在流与外部文件关联后,但是 在对其执行任何操作之前,流是没有方向的。一次广泛 字符输入/输出功能已应用于没有方向的流, 流成为一个面向广泛的流。类似地,一旦字节输入/输出功能具有 已经应用于没有方向的流,该流成为面向字节的流。 只有调用freopen函数或fwide函数才能改变 流的方向。 (对freopen的成功召唤将取消任何方向。)267)
5 字节输入/输出功能不适用于广泛的流和宽 字符输入/输出函数不应应用于面向字节的流。 [...]
请参阅此处以获得更好的演示,突出显示出错的内容和不出现的内容:
http://coliru.stacked-crooked.com/a/5c3a34c0c4523016