gpt4 book ai didi

c++ - 打印撇号 + 宽字符串文字破坏了我的 wofstream (C++)

转载 作者:太空宇宙 更新时间:2023-11-04 12:28:16 25 4
gpt4 key购买 nike

在处理不祥的排版撇号 (’) 而不是打字机撇号 (’) 时,我刚刚遇到了一些奇怪的行为。与宽字符串文字一起使用时,撇号会中断 wofstream。

这段代码有效

ofstream file("test.txt");
file << "A’B" ;
file.close();

==> A'B

这段代码有效

wofstream file("test.txt");
file << "A’B" ;
file.close();

==> A'B

此代码失败

wofstream file("test.txt");
file << L"A’B" ;
file.close();

==>一个

此代码失败...

wstring test = L"A’B";
wofstream file("test.txt");
file << test ;
file.close();

==>一个

有什么想法吗?

最佳答案

您应该在使用 wofstream 之前“启用”语言环境:

std::locale::global(std::locale()); // Enable locale support 
wofstream file("test.txt");
file << L"A’B";

因此,如果您有系统区域设置 en_US.UTF-8,那么文件 test.txt 将包含utf8 编码数据(4 字节),如果您有系统区域设置 en_US.ISO8859-1,那么它会将其编码为 8 位编码(3 字节),除非 ISO 8859-1 缺少此类字符。

wofstream file("test.txt");
file << "A’B" ;
file.close();

此代码有效,因为 "A'B" 实际上是 utf-8 字符串,而您保存的是 utf-8字符串逐字节文件。

注意:我假设您使用的是类似 POSIX 的操作系统,并且您的默认语言环境不同于默认语言环境“C”。

关于c++ - 打印撇号 + 宽字符串文字破坏了我的 wofstream (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/816092/

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