【发布时间】:2012-11-21 17:40:18
【问题描述】:
我有一个巨大的文件,其中包含开头的 unicode 字符串(第一个 ~10,000 个字符左右)
我不关心 unicode 部分,我感兴趣的部分不是 unicode,但每当我尝试读取这些部分时,我都会得到'=',如果我要将整个文件加载到 char 数组并写入一些带有ofstream 的临时文件(不更改数据)我得到的数据不正确实际上我得到的只是一个填充有Í 的文本文件如果我要手动删除unicode 部分一切正常,所以看起来ifstream 无法处理使用包含 unicode 数据的流,但如果这个假设成立,有没有办法处理这个文件,将新库引入我的项目?
谢谢,
编辑:这是一个示例代码,程序从这个文件中读取,其中包含不能用 ASCII 表示的字符(一些,不是全部)。
ifstream inFile("somefile");
inFile.seekg(0,ios_base::end);
size_t size = inFile.tellg();
inFile.seekg(0,ios_base::beg);
char *book = new char[size];
inFile.read(book,size);
for (int i = 0; i < size; i++) {
cout << book[i] << " " << i << endl; //book[i] will always be '='
}
ofstream outFile("TEST.txt");
outFile.write(book,size);
outFile.close();
【问题讨论】:
-
有许多 Unicode 库能够读取此类文件。 (例如 Qt 内部或 GTK 的 Glib 内部)。
-
是的,我知道我可以使用 Qt,但我不想在我的项目中引入新库。另外,我不关心unicode部分我只关心unicode字符之后的部分(可以用ASCII表示的部分)
-
文件使用 Unicode 的几种表示形式(UTF-8、UTF-16、UTF-32 等)中的哪一种?
-
"如果这个假设为真" --- 根据您的平台、编译器和 Unicode 表示(UTF-8 等),该假设可能正确,也可能不正确。分享以上部分或全部内容会有所帮助。
-
它使用 UTF-8,但我也带有 ANSI 版本(不适用于 ifstream)
标签: c++ unicode ascii iostream ifstream