gpt4 book ai didi

g++ - wcout 函数不打印法语字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:19 28 4
gpt4 key购买 nike

我使用 wcin 是为了在 wchar_t 中存储单个字符。然后我尝试使用 wcout 调用和法语字符 'é' 打印它:但我无法在我的控制台上看到它。

我的编译器是 g++ 4.5.4,我的操作系统是 Ubuntu 12.10 64 位。

这是我的尝试(wideChars.cpp):

#include <iostream>

int main(){
using namespace std;

wchar_t aChar;
cout << "Enter your char : ";
wcin >> aChar;
wcout << L"You entered " << aChar << L" .\n";

return 0;
}

当我启动程序时:

$ ./wideChars 
Enter your char : é
You entered .

那么,这段代码有什么问题?

最佳答案

首先,添加一些错误检查。测试 wcin.good() 在输入后返回什么以及 wcout.good() 在“您输入”打印后返回什么?我怀疑其中一个会返回 false

LANGLC_* 环境变量设置为什么?

然后尝试通过在 main() 的顶部添加以下内容来解决此问题: wcin.imbue(std::locale("")); wcout.imbue(std::locale(""));

我现在手边没有 Ubuntu,所以我在这里盲目飞行,主要是猜测。

更新

如果上述建议没有帮助,那么请尝试像这样构造语言环境,并改为使用 imbue() 这个语言环境。

std::locale loc (
std::locale (),
new std::codecvt_byname<wchar_t, char, std::mbstate_t>("")));

<罢工>

更新 2

这是对我有用的。 关键是还要设置C语言环境。恕我直言,这是 GNU C++ 标准库实现中的一个错误。除非我弄错了,否则设置 std::locale::global(""); 也应该设置 C 库语言环境。

#include <iostream>
#include <locale>
#include <clocale>

#define DUMP(x) do { std::wcerr << #x ": " << x << "\n"; } while (0)

int main(){
using namespace std;

std::locale loc ("");
std::locale::global (loc);
DUMP(std::setlocale(LC_ALL, NULL));
DUMP(std::setlocale(LC_ALL, ""));
wcin.imbue (loc);

DUMP (wcin.good());
wchar_t aChar = 0;
wcin >> aChar;
DUMP (wcin.good());
DUMP ((int)aChar);
wcout << L"You entered " << aChar << L" .\n";

return 0;
}

更新 3

我很困惑,现在我无法再次重现它并且设置 std::locale::global(loc); 似乎也对 C 语言环境做了正确的事情。

关于g++ - wcout 函数不打印法语字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15524311/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com