"纯种"C++解析unicode文件
C++解析UNICODE字符表示很蛋疼,现在记录下下午的收获,以备以后调用。
基本思路:按行读取unicode文件,存为wstring, 再将其转为string,然后通过stringstream来处理,获取想要的数据
基本函数:
#include <clocale> #include <cassert> #include <string> #include <fstream> //string转wstring std::wstring string2wstring(const std::string& str) { unsigned len = str.size() * 2; // 预留字节数 setlocale(LC_CTYPE, ""); //必须调用此函数 wchar_t *p = new wchar_t[len]; // 申请一段内存存放转换后的字符串 mbstowcs(p,str.c_str(),len); // 转换 std::wstring str1(p); delete[] p; // 释放申请的内存 return str1; } // wstring转string std::string wstring2string(const std::wstring& str) { unsigned len = str.size() * 4; setlocale(LC_CTYPE, ""); char *p = new char[len]; wcstombs(p,str.c_str(),len); std::string str1(p); delete[] p; return str1; } //获取unicode文件一行 std::wstring wgetline(std::ifstream& fin) { assert( fin.good() ); std::wstring wstr; wchar_t wc; while ( !fin.eof() ) { fin.read( (char*)&wc, sizeof(wchar_t) );//每次读取2个字符 if ( wc == 0x000D ) //如果是回车 { fin.seekg( 2, std::ios::cur );//丢弃换行字符 break; } else { wstr.append( 1, wc );//加入wstr } } return wstr; }
以后再次处理,果断贴代码,怒了!