当前位置: 技术问答>linux和unix
C++读文件,中文无法显示和比较(内有详细代码)
来源: 互联网 发布时间:2016-07-19
本文导语: 在读一个UTF8编码的文件时, 对每一行,都转换为单字符串。 但文件中的中文显示不出来,也无法实现查找。 代码: ifstream ifs("file"); string strTarget = "目标"; printf("%sn", strTarget); //成功显示中文。 string strLine; whi...
在读一个UTF8编码的文件时,
对每一行,都转换为单字符串。
但文件中的中文显示不出来,也无法实现查找。
代码:
用到的两个字符转换函数如下,参考大侠们的代码:
对每一行,都转换为单字符串。
但文件中的中文显示不出来,也无法实现查找。
代码:
ifstream ifs("file");
string strTarget = "目标";
printf("%sn", strTarget); //成功显示中文。
string strLine;
while(getline(ifs, strLine, 'n'))
{
wstr = UTF2Uni(strLine.c_str(), wstr); //从UTF8转为宽字符
strLine = ws2s(wstr); //从宽字符转为单字符
printf("%sn", strLine.c_str()); //(1)中文显示不出来!!
if(strLine.find(strTarget) != string::npos) //(2)文件中含有“目标”,但找不到!!
{
...
}
}
用到的两个字符转换函数如下,参考大侠们的代码:
wstring UTF2Uni(const char* src, std::wstring &t)
{
if (src == NULL)
{
return L"";
}
int size_s = strlen(src);
int size_d = size_s + 10; //?
wchar_t *des = new wchar_t[size_d];
memset(des, 0, size_d * sizeof(wchar_t));
int s = 0, d = 0;
bool toomuchbyte = true; //set true to skip error prefix.
while (s