为什么cout<< “”工作但是wcout<< “”不是吗?

时间:2014-10-16 17:33:13

标签: c++ character-encoding

为什么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 我定义了一个合适的语言环境,但它仍然无法正常工作

1 个答案:

答案 0 :(得分:2)

该错误混合了std::coutstd::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