怎么用C++ BUILDER实现繁体转简体
如何用C++ BUILDER实现繁体转简体?
网上搜了一堆,没看见用C++ BUILDER成功解决的呀。BCB从ORACLE数据库里取出的是繁体,如何将数据转换为简体呢?程序运行环境为简体中文XP。感谢!
------解决方案--------------------
网上搜了一堆,没看见用C++ BUILDER成功解决的呀。BCB从ORACLE数据库里取出的是繁体,如何将数据转换为简体呢?程序运行环境为简体中文XP。感谢!
------解决方案--------------------
- C/C++ code
//.h public: // User declarations __fastcall TForm1(TComponent* Owner); void __fastcall GBK2GB(char *szBuf); }; //--------------------------------------- //.cpp __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Edit1->Text = "中華人民共和國"; } //--------------------------------------- // GBK码转GB2312码 // 中華人民共和國 --> * void __fastcall TForm1::GBK2GB(char *szBuf) { if(!strcmp(szBuf, "")) return; int nStrLen = strlen(szBuf); WORD wLCID = MAKELCID(MAKELANGID (LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_BIG5); int nReturn = LCMapString(wLCID, LCMAP_SIMPLIFIED_CHINESE, szBuf, nStrLen, NULL, 0); if(!nReturn) return; char *pcBuf = new char[nReturn + 1]; try { wLCID = MAKELCID(MAKELANGID (LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_BIG5); LCMapString(wLCID, LCMAP_SIMPLIFIED_CHINESE, szBuf, nReturn, pcBuf, nReturn + 1); strncpy(szBuf, pcBuf, nReturn); } __finally { delete []pcBuf; } } void __fastcall TForm1::Button1Click(TObject *Sender) { char szBuf[255]; AnsiString Str = Edit1->Text ; strcpy(szBuf,Str.c_str()); GBK2GB(szBuf); Edit2->Text = AnsiString(szBuf); } //---------------------------------------
------解决方案--------------------
出处
http://www.ccrun.com/article.asp?i=634&d=04g63p
------解决方案--------------------
我以前用的互转的函数,供参考:
//----------------------------
//函数输入Big5字符,返回Gb简体字符
//----------------------------
AnsiString __fastcall Big2Gb(AnsiString sBig)
{
char* pszBig5=NULL; //Big5编码的字符
wchar_t* wszUnicode=NULL; //Unicode编码的字符
char* pszGbt=NULL; //Gb编码的繁体字符
char* pszGbs=NULL; //Gb编码的简体字符
AnsiString sGb; //返回的字符串
int iLen=0; //需要转换的字符数
pszBig5=sBig.c_str(); //读入需要转换的字符参数
//计算转换的字符数
iLen=MultiByteToWideChar (950, 0, pszBig5, -1, NULL,0) ;
//给wszUnicode分配内存
wszUnicode=new wchar_t[iLen+1];
//转换Big5码到Unicode码,使用了API函数MultiByteToWideChar
MultiByteToWideChar (950, 0, pszBig5, -1, wszUnicode,iLen);
//计算转换的字符数
iLen=WideCharToMultiByte (936, 0, (PWSTR) wszUnicode, -1, NULL,0, NULL, NULL) ;
//给pszGbt分配内存
pszGbt=new char[iLen+1];
//给pszGbs分配内存
pszGbs=new char[iLen+1];
//转换Unicode码到Gb码繁体,使用API函数WideCharToMultiByte
WideCharToMultiByte (936, 0, (PWSTR) wszUnicode, -1, pszGbt,iLen, NULL, NULL) ;
//转换Gb码繁体到Gb码简体,使用API函数LCMapString
LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE, pszGbt, -1, pszGbs, iLen);
//返回Gb码简体字符
sGb=pszGbs;
//释放内存
delete [] wszUnicode;
delete [] pszGbt;
delete [] pszGbs;
return sGb;
}
//---------------------------------------
//函数输入Gb字符,返回Big5字符
//---------------------------------------
AnsiString __fastcall Gb2Big(AnsiString sGb)
{
char* pszGbt=NULL; //Gb编码的繁体字符
char* pszGbs=NULL; //Gb编码的简体字符
wchar_t* wszUnicode=NULL; //Unicode编码的字符
char* pszBig5=NULL; //Big5编码的字符
AnsiString sBig5; //返回的字符串
int iLen=0; //需要转换的字符数