以下代码按预期工作。源代码、文件“file.txt”和“out.txt”均采用utf8编码。但是当我在第一行更改wchar_t
为. 我已经尝试过 gcc5.4 和 clang8.0 。我的目标是替换为, 因为在 RAM 中需要两倍的空间。我认为这两种类型在 c++11 及更高版本的标准中同样得到很好的支持。我在这里想念什么?char16_t
main()
-std=c++11
wchar_t
char16_t
wchar_t
#include<iostream>
#include<fstream>
#include<locale>
#include<codecvt>
#include<string>
int main(){
typedef wchar_t my_char;
std::locale::global(std::locale("en_US.UTF-8"));
std::ofstream out("file.txt");
out << "123正则表达式abc" << std::endl;
out.close();
std::basic_ifstream<my_char> win("file.txt");
std::basic_string<my_char> wstr;
win >> wstr;
win.close();
std::ifstream in("file.txt");
std::string str;
in >> str;
in.close();
std::wstring_convert<std::codecvt_utf8<my_char>, my_char> my_char_conv;
std::basic_string<my_char> conv = my_char_conv.from_bytes(str);
std::cout << (wstr == conv ? "true" : "false") << std::endl;
std::basic_ofstream<my_char> wout("out.txt");
wout << wstr << std::endl << conv << std::endl;
wout.close();
return 0;
}
编辑
修改后的代码不能用 clang8.0 编译。它使用 gcc5.4 编译,但在运行时崩溃,如 @Brian 所示。