如何解决在macOS上将文件内容读取到wchar_t4Bytes的正确方法是什么?
我们知道wchar_t
在Windows上是2字节,在macOS / Linux上是4字节。
我正在尝试读取具有Unicode字符串但该字符串读取不正确(未知符号)的文件。
basic_ifstream<wchar_t> file("/Documents/file.txt",ios_base::ate); // or wifstream
if(!file.is_open()){
cout << "Cannot open the file." << endl;
}
streamsize size = file.tellg();
file.seekg(0);
wstring str (size,0); // or (size / 4,0)
file.read(reinterpret_cast<wchar_t*>(&str[0]),size);
file.close();
在调试该代码以查看字符串是否正确读取时,我发现字符串读取错误(未知符号)。
将Unicode文件内容读入wchar_t
的正确方法是什么?
解决方法
正确阅读的一种方法是:
#include <iostream>
#include <fstream> // for wifstream
#include <codecvt> // for locale & codecvt_utf8
#include <sstream> // for wstringstream
using namespace std;
int main() {
wifstream wif("file.txt");
wif.imbue(locale(locale::empty(),new codecvt_utf8_utf16<wchar_t>));
wstringstream wss;
wss << wif.rdbuf();
wstring wstr = wss.str();
return 0;
}
,
正确的方法是使用一行Cocoa函数,该函数以NSString形式读取文件的内容,并注意字符编码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。