- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下代码按预期工作。源代码,文件“file.txt”和“out.txt”都是用utf8编码的。但是当我改变时它不起作用wchar_t
至 char16_t
在 main()
的第一行.我用 -std=c++11
试过 gcc5.4 和 clang8.0 .我的目标是替换 wchar_t
与 char16_t
, 如 wchar_t
在 RAM 中占用两倍的空间。我认为这两种类型在 c++11 和更高版本的标准中同样得到很好的支持。我在这里想念什么?
#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;
}
最佳答案
各种流类需要一组定义才能操作。标准库只需要 char
的相关定义和对象和 wchar_t
但不适用于 char16_t
或 char32_t
.在我的头顶上,需要使用以下内容 std::basic_ifstream<cT>
或 std::basic_ofstream<cT>
:
std::char_traits<cT>
指定字符类型的行为方式。我认为这个模板专门用于char16_t
和 char32_t
. std::locale
需要包含 std::num_put<cT>
的实例格式化数字类型的方面。这个方面可以被实例化和一个新的 std::locale
可以创建包含它,但标准不强制要求它存在于 std::locale
中。目的。 std::locale
需要包含构面的实例 std::num_get<cT>
读取数字类型。同样,这个方面可以被实例化,但默认情况下不需要存在。 std::numpunct<cT>
需要专门投入使用std::locale
处理小数点、千位分隔符和文本 bool 值。即使它没有真正被使用,它也会被数字格式和解析函数引用。没有现成的特化 char16_t
或 char32_t
. std::ctype<cT>
需要专门化并放入使用的facet中,以支持字符类型的加宽、缩小和分类。没有现成的特化 char16_t
或 char32_t
.std::codecvt<cT, char, std::mbstate_t>
需要专门投入使用std::locale
在外部字节序列和内部“字符”序列之间进行转换。没有现成的特化 char16_t
或 char32_t
. std::codecvt
facet 往往相当棘手,尤其是因为
std::mbstate_t
从标准 C++ 库的角度来看,是一种不透明类型。
关于c++ - 为什么 `std::basic_ifstream<char16_t>` 在 c++11 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63321284/
这是我第一次使用QString,我不知道如何解决此错误: Personanetscape.cpp:16:错误:没有匹配的函数可以调用“std::basic_ifstream::basic_ifstre
我正在尝试编写一个程序来打开一个文件并计算该文件中以空格分隔的单词数。 #include #include #include using namespace std; int main() {
从这段代码构建的程序: #include using std::basic_ifstream; #include using std::streamsize; #include using Ze
我有一个二进制文件。上半部分存储了2288*2288个经度浮点值,同样数量的纬度浮点值占据了下半部分。我使用以下代码将它们加载到浮点 vector 中。它可以像魅力一样运行,但给了我不正确的结果。关于
我应该编写一个程序,合并两个文件中的数字并将所有数字写入第三个文件。该程序从两个不同的文件中获取输入并将其输出写入第三个文件。每个输入文件都包含一个按从小到大排序的 int 类型数字列表。程序运行后,
这可能吗?我一直在尝试读取一个包含俄语的简单文件,但显然无法正常工作。 我调用了 file.imbue(loc)(此时,loc 是正确的,Russian_Russia.1251)。而 buf 的类型是
我正在尝试使用以下代码从文件中读取数据。 (请注意,您需要在 GCC 上启用 C++11 功能才能进行此编译。) #include typedef unsigned char byte; int m
我想不通,是否可以将 std::basic_ifstream 和 std::basic_ofstream 与 std::basic_filebuf 的自定义实现一起使用? 按 64KB 大小的 blo
我在图像处理的上下文中学习 IO,这是我第一次不得不将流用于二进制文件而不是格式化/文本文件。我正在尝试使用带有模板编程的重载流插入运算符将位图的前 14 个字符读入结构。 #include #in
以下代码按预期工作。源代码,文件“file.txt”和“out.txt”都是用utf8编码的。但是当我改变时它不起作用wchar_t至 char16_t在 main() 的第一行.我用 -std=c+
以下代码按预期工作。源代码、文件“file.txt”和“out.txt”都是用utf8编码的。但是,当我在 main() 的第一行将 wchar_t 更改为 char16_t 时,它不起作用。我已经用
当我尝试运行它时: #include #include int _tmain(int argc, TCHAR *argv[]) { std::basic_ifstream file("Te
There are already questions在 Stackoverflow 上询问 为什么 basic_fstream不起作用。答案说char_traits仅专门用于 char和 wchar
上面写着“Apple Mach-O Linker (Id) Error "readIt(std::_1::basic_ifstream >&," 有没有人看到它一直卡住的错误?非常感谢! #inclu
我是一名优秀的程序员,十分优秀!