问题来源:
我想为淘书写一个子串搜索,我首先想到的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);
}
本文介绍了在C++中处理宽字符(wchar_t)时遇到的汉字读写文件的挑战。作者探讨了使用wstring和wfstream,并指出直接以二进制方式写入可能导致中文乱码。通过设置地域locale,成功解决了中文写入文件的问题,确保了宽字符的正确存储。
391

被折叠的 条评论
为什么被折叠?



