update cppcommon

This commit is contained in:
gwdwyy 2013-07-22 00:08:08 +08:00
parent 65280738e4
commit aa0f95bcc6
2 changed files with 150 additions and 0 deletions

111
src/cppcommon/encoding.cpp Normal file
View File

@ -0,0 +1,111 @@
#include "encoding.h"
namespace CPPCOMMON
{
const string& UnicodeEncoding::UTF8ENC = "utf-8";
const string& UnicodeEncoding::GBKENC = "gbk";
UnicodeEncoding::UnicodeEncoding()
{
_encVec.push_back(UTF8ENC);
_encVec.push_back(GBKENC);
_encoding = UTF8ENC;
}
UnicodeEncoding::~UnicodeEncoding()
{
}
bool UnicodeEncoding::setEncoding(const string& enc)
{
if(!isInVec<string>(_encVec, enc))
{
return false;
}
_encoding = enc;
return true;
}
string UnicodeEncoding::encode(const string& str)
{
if(!isUniStrValid(str))
{
cout<<__FILE__<<__LINE__<<endl;
return "";
}
if(UTF8ENC == _encoding)
{
return unicodeToUtf8(str);
}
else if(GBKENC == _encoding)
{
return utf8ToGbk(unicodeToUtf8(str));
}
cout<<__FILE__<<__LINE__<<endl;
return "";
}
string UnicodeEncoding::decode(const string& str)
{
if(str.empty())
{
cout<<__FILE__<<__LINE__<<endl;
return "";
}
string res;
if(UTF8ENC == _encoding)
{
res = utf8ToUnicode(str);
if(isUniStrValid(res))
{
return res;
}
}
else if(GBKENC == _encoding)
{
res = utf8ToUnicode(gbkToUtf8(str));
if(isUniStrValid(res))
{
return res;
}
}
cout<<__FILE__<<__LINE__<<endl;
return "";
}
}
#ifdef ENCODING_UT
using namespace CPPCOMMON;
int main()
{
UnicodeEncoding enc;
ifstream ifile("testdata/dict.utf8");
string line;
//enc.setEncoding(UnicodeEncoding::UTF8ENC);
//enc.setEncoding(UnicodeEncoding::GBKENC);
//while(getline(ifile, line))
//{
// cout<<line<<endl;
// cout<<enc.encode(enc.decode(line))<<endl;
// cout<<enc.decode(enc.encode(line))<<endl;
// cout<<enc.decode(line)<<endl;
// cout<<enc.encode(line)<<endl;
//}
ifile.close();
ifile.open("testdata/dict.gbk");
enc.setEncoding(UnicodeEncoding::GBKENC);
while(getline(ifile, line))
{
cout<<line<<endl;
cout<<line.size()<<endl;
cout<<enc.encode(enc.decode(line))<<endl;
cout<<enc.decode(enc.encode(line))<<endl;
cout<<enc.decode(line)<<endl;
cout<<enc.encode(line)<<endl;
}
ifile.close();
return 0;
}
#endif

39
src/cppcommon/encoding.h Normal file
View File

@ -0,0 +1,39 @@
/************************************
* file enc : utf8
* author : wuyanyi09@gmail.com
************************************/
#ifndef CPPCOMMON_ENCODING_H
#define CPPCOMMON_ENCODING_H
#include "str_functs.h"
#include "vec_functs.h"
namespace CPPCOMMON
{
using namespace std;
class UnicodeEncoding
{
public:
static const string& UTF8ENC;
static const string& GBKENC;
private:
string _encoding;
vector<string> _encVec;
public:
UnicodeEncoding();
~UnicodeEncoding();
public:
bool setEncoding(const string& enc);
string encode(const string& str);
string decode(const string& str);
public:
bool isUniStrValid(const string& unistr)
{
return !(unistr.empty() || unistr.size() % 2);
}
};
}
#endif