wchar_t 汉字显示和汉字写入文件问题

本文介绍了在C++中处理宽字符(wchar_t)时遇到的汉字读写文件的挑战。作者探讨了使用wstring和wfstream,并指出直接以二进制方式写入可能导致中文乱码。通过设置地域locale,成功解决了中文写入文件的问题,确保了宽字符的正确存储。

问题来源:

我想为淘书写一个子串搜索,我首先想到的string(char)但是有个问题,string的两个char可能是一个汉字,也可能是两个英文,所以被迫选择wstring,这就遇到wchar_t如何读取和写入文件的问题

经历:

我查了很多关于这方面的问题,一般都是说使用wfstream,putwchar,还有说二进制的,最终在不久前找到解决办法。

错误解决方案1 二进制输入 英文数字都行 中文不行

int main() {
	wchar_t pwstr[] = L"111";
	std::wofstream file("123",std::ios::binary);
	file.write(pwstr, 1);
}

int main() {    //二进制写入
	wchar_t pwstr[] = L"淘书";
	std::wofstream file("123",std::ios::binary);
    file.write(pwstr, 1);    //就写一个字 
}

剩下错误方案不在列举

解决方案是:设置地域

int main() {
	std::locale loc("zh_CN");
	wchar_t pwstr[] = L"淘书";
	std::wofstream file("123",std::ios::binary);
	file.imbue(loc);
	file.write(pwstr, 1);
}

int main() {
	std::locale loc("zh_CN");
	std::locale::global(loc);
	wchar_t pwstr[] = L"淘书";
	std::wofstream file("123",std::ios::binary);
	file.write(pwstr, 1);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值