相关疑难解决方法(0)

如何使用std :: imbue设置std :: wcout的语言环境?

我试图使用std::localeC++ 11中的机制来计算不同语言的单词.具体来说,我有std::wstringstream一本着名的俄罗斯小说(英文"罪与罚")的标题.我想要做的是使用适当的语言环境(ru_RU.utf8在我的Linux机器上)来读取字符串流,计算单词并打印结果.我还应该注意,我的系统设置为使用en_US.utf8语言环境.

期望的结果是:

0: "????????????"
1: "?"
2: "?????????"

I counted 3 words.
and the last word was "?????????"
Run Code Online (Sandbox Code Playgroud)

这一切都在我设置全局区域设置时有效,但在我尝试imbue使用wcout流时则不行.当我尝试这个时,我得到了这个结果:

0: "????????????"
1: "?"
2: "?????????"

I counted 3 words.
and the last word was "?????????"
Run Code Online (Sandbox Code Playgroud)

此外,当我尝试使用评论中建议的解决方案时(可以通过更改#define USE_CODECVT 0来激活#define USE_CODECVT 1)我得到了另一个问题中提到的错误.

那些对代码进行试验,或者使用编译器设置或两者都感兴趣的人可能希望使用这个实时代码.

我的问题

  1. 为什么这不起作用?是因为wcout已经开放了吗?
  2. 有没有办法使用imbue而不是设置全局区域设置来做我想要的?

如果它有所作为,我正在使用g ++ 4.8.3.完整代码如下所示.

getwords.cpp

#include <iostream>
#include <fstream>
#include <sstream>
#include …
Run Code Online (Sandbox Code Playgroud)

c++ locale c++11

19
推荐指数
2
解决办法
7786
查看次数

标签 统计

c++ ×1

c++11 ×1

locale ×1