
标准C++读取Unicode文本文档的问题
最近在学习写一些小程序,在读取Unicode编码文本时碰到了这样的一个问题,按照以下的代码,程序在VC6.0\VS2008都能编译通过,也能运行,但出现一个怪事情,当文本...
最近在学习写一些小程序,在读取Unicode编码文本时碰到了这样的一个问题,按照以下的代码,程序在VC6.0\VS2008都能编译通过,也能运行,但出现一个怪事情,当文本字符完全使用西方字符(不仅包括英文字符也包括一些特殊字符),程序能正确运行;当文本中包含汉字时,程序的运行就会出错(编译器不给出错误信息,应该是认为文件已经读完了),一般就是读到1.5K左右吧,具体不是很确切,有浮动的!
程序是使用仿二进制读取的方法写的,每次读入一个wchar_t的内容,然后再逐步添加到字符串!以下是代码贴上(好像太长贴不上,看看能不能楼下补充,先发了)!
贴不上,只能贴关键代码段了,下面这段代码是从文件输入流中读入文件,解析后添加到vector<string>容器中,出错的应该是这段,输出了一下,每次总是在这里没读完文本函数就返回了!
vector<string>& set_vec(ifstream &in,vector<string> &vec)
{
string temp;
wchar_t wch;
size_t index = 2;
while (!in.eof())
{
in.seekg(index, ios::beg);
in.read((char *)(&wch), 2);
if (wch == 0x000d) // 判断换行符
{
vec.push_back(temp);
cout << "IS A UNICODE" << endl;
temp.erase(0, temp.size() + 1);
index += 4; // 跳过回车和行首字符
}
else
{
temp.append((char *)(&wch),2);
index += 2;
}
}
cout << hex << index << endl;
cout << hex << wch << endl;
system("pause");
cout << "i finished the set_vec!" << endl;
return vec;
}
回一楼,wstring我之前用过,读入是没问题,不过写文件时候不知道怎么搞的,老按GBK编码写,0x3100老写成0x31,还有,我觉得主要问题应该还是在输入流上面,可能while()语句认为文件已经到末尾了? 展开
程序是使用仿二进制读取的方法写的,每次读入一个wchar_t的内容,然后再逐步添加到字符串!以下是代码贴上(好像太长贴不上,看看能不能楼下补充,先发了)!
贴不上,只能贴关键代码段了,下面这段代码是从文件输入流中读入文件,解析后添加到vector<string>容器中,出错的应该是这段,输出了一下,每次总是在这里没读完文本函数就返回了!
vector<string>& set_vec(ifstream &in,vector<string> &vec)
{
string temp;
wchar_t wch;
size_t index = 2;
while (!in.eof())
{
in.seekg(index, ios::beg);
in.read((char *)(&wch), 2);
if (wch == 0x000d) // 判断换行符
{
vec.push_back(temp);
cout << "IS A UNICODE" << endl;
temp.erase(0, temp.size() + 1);
index += 4; // 跳过回车和行首字符
}
else
{
temp.append((char *)(&wch),2);
index += 2;
}
}
cout << hex << index << endl;
cout << hex << wch << endl;
system("pause");
cout << "i finished the set_vec!" << endl;
return vec;
}
回一楼,wstring我之前用过,读入是没问题,不过写文件时候不知道怎么搞的,老按GBK编码写,0x3100老写成0x31,还有,我觉得主要问题应该还是在输入流上面,可能while()语句认为文件已经到末尾了? 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询