我正在尝试在我的C++20程序中使用和显示法语重音字符。
然而,使用
然而,当我尝试将相同的文本显示为
使用
我读到可能需要将区域设置注入到
我对C++还比较新,所以不确定是否有更好的工具来解决这类问题,至少我找不到。
我在MinGW上使用zsh,集成在VSCode中。
我使用以下命令进行编译:
然而,使用
std::getline()
来读取文件内部似乎会弄乱重音字符,就像这样:#include <locale>
#include <iostream>
#include <fstream>
int main(void)
{
setlocale(LC_ALL,"");
std::wifstream file("test.txt");
std::wstring s;
std::getline(file, s);
std::wcout << s << std::endl;
return 0;
}
测试.txt的内容(以UTF-8编码):
Salut ! Comment ça va ? éèêëâàäáôûöüùîï
结果:
$>./test
Salut ! Comment ça va ? éèêëâà äáôûöüùîï
然而,当我尝试将相同的文本显示为
const std::wstring
时,结果没有任何问题。#include <locale>
#include <iostream>
int main(void)
{
setlocale(LC_ALL,"");
std::wstring s = L"Salut ! Comment ça va ? éèêëâàäáôûöüùîï";
std::wcout << s << std::endl;
return 0;
}
结果:
$>./test
Salut ! Comment ça va ? éèêëâàäáôûöüùîï
使用
setlocale(LC_ALL, "")
已经使问题得到了改善,因为之前即使第二个例子也无法工作,但是std::getline()
似乎存在一个我无法理解的问题。我读到可能需要将区域设置注入到
std::wifstream
中,但是我无法理解如何使其工作。我对C++还比较新,所以不确定是否有更好的工具来解决这类问题,至少我找不到。
我在MinGW上使用zsh,集成在VSCode中。
我使用以下命令进行编译:
c++ -Wall -Wextra -Werror -std=c++20 test.cpp -o test
std::locale
来为wifstream
设置imbue()
,以处理文件的UTF-8编码。setlocale()
是不够的。 - undefinedtest.txt
是以 UTF-8 编码,还是 UTF-16 编码,或者其他编码? - undefined