常见的三种中文内码转换代码呢
常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都是乱码,如果在IE中浏览,则要求安装繁体字库的支持。Windows中提供了MultiByteToWideChar和WideCharToMultiByte两兄弟函数,足可以搞定这些功能了。
以下四个函数分别实现:
大五码转GBK码/GBK转大五码
GB2312码转GBK码/GBK码转GB2312码
于是有人要问了,为什么没有GB2312转BIG5和BIG5转GB2312呢,我们有GBK,可以做一下中转啊。可以将GB2312转成GBK,再将GBK转成BIG5,反之亦然。如果你嫌麻烦,可以自己写一个GB2BIG5/BIG52GB,并且欢迎你将你的代码给我一份:info@
//---------------------------------------------------------------------------
//大五码转GBK码:
//い地チ㎝瓣--中華人民共和國
void__fastcallBIG52GBK(char*szBuf)
{
if(!strcmp(szBuf,\"\"))
return;
intnStrLen=strlen(szBuf);
wchar_t*pws=newwchar_t[nStrLen+1];
try
{
intnReturn=MultiByteToWideChar(950,0,szBuf,nStrLen,pws,nStrLen+1);
BOOLbValue=false;
nReturn=WideCharToMultiByte(936,0,pws,nReturn,szBuf,nStrLen+1,\"?\",bValue);
szBuf[nReturn]=0;
}
__finally
{
delete[]pws;
}
}
//---------------------------------------------------------------------------
//GBK转大五码
//中華人民共和國--い地チ㎝瓣
void__fastcallGBK2BIG5(char*szBuf)
{
if(!strcmp(szBuf,\"\"))
return;
intnStrLen=strlen(szBuf);
wchar_t*pws=newwchar_t[nStrLen+1];
try
{
MultiByteToWideChar(936,0,szBuf,nStrLen,pws,nStrLen+1);
BOOLbValue=false;
WideCharToMultiByte(950,0,pws,nStrLen,szBuf,nStrLen+1,\"?\",bValue);
szBuf[nStrLen]=0;
}
__finally
{
delete[]pws;
}
}
//----------------------------------------------------------------------------
//抱歉,这个提示又来了,为了防止不负的转载者,只好在此留些信息。
//作者:ccrun(老妖)info@
//本文转自C++Builder研究-
//---------------------------------------------------------------------------
//GB2312码转GBK码
//中华人民共和国--中華人民共和國
void__fastcallGB2GBK(char*szBuf)
{
if(!strcmp(szBuf,\"\"))
return;
intnStrLen=strlen(szBuf);
WORDwLCID=MAKELCID(MAKELANGID
(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);
intnReturn=LCMapString(wLCID,LCMAP_TRADITIONAL_CHINESE,szBuf,nStrLen,NULL,0);
if(!nReturn)
return;
char*pcBuf=newchar[nReturn+1];
try
{
wLCID=MAKELCID(MAKELANGID
(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);
LCMapString(wLCID,LCMAP_TRADITIONAL_CHINESE,szBuf,nReturn,pcBuf,nReturn+1);
您当前的位置 :正文 strncpy(szBuf,pcBuf,nReturn);
}
__finally
{
delete[]pcBuf;
}
}
//---------------------------------------------------------------------------
//GBK码转GB2312码
//中華人民共和國--中华人民共和国
void__fastcallGBK2GB(char*szBuf)
{
if(!strcmp(szBuf,\"\"))
return;
intnStrLen=strlen(szBuf);
WORDwLCID=MAKELCID(MAKELANGID
(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_BIG5);
intnReturn=LCMapString(wLCID,LCMAP_SIMPLIFIED_CHINESE,szBuf,nStrLen,NULL,0);
if(!nReturn)
return;
char*pcBuf=newchar[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__fastcallTForm1::Button1Click(TObject*Sender)
{
charszBuf[255];
//从GB2312转到GBK
strcpy(szBuf,Edit1-Text.c_str());
GB2GBK(szBuf);
Edit2-Text=String(szBuf);
//从GB2312转到BIG5,通过GBK中转
strcpy(szBuf,Edit1-Text.c_str());
GB2GBK(szBuf);
GBK2BIG5(szBuf);
Edit3-Text=String(szBuf);
}
注意,请不要使用String类的c_str()作为上述几个函数的传入参数。
查看本文来源
呼伦贝尔哪里治白癜风最好合肥阴道炎
金华白癜风重点医院
- 上一篇:常见故障拨号超时故障的解决牛
- 下一篇:常见的十四种开发工具及其特点的
-
杜高犬智商排第几名它是怎样的狗狗位置
杜高犬智商排第几名?它是怎样的狗狗杜高犬智商排第几名?它是怎样的狗狗宠主在想要饲 狗的时候,同样也会去了解不同狗狗的生活习...[详细]
家居百科2022.06.12
-
杜高犬怎么样杜高犬的优缺点位置
杜高犬怎么样?杜高犬的优缺点杜高犬怎么样?杜高犬的优缺点 14:30:43by 呦呦杜高犬身体强壮,体型健美线条流畅,通身雪白。是一种非...[详细]
家居百科2022.06.12
-
松狮吃什么食物好松狮的营养食谱及喂养注意位置
松狮吃什么食物好?松狮的营养食谱及喂养注意事项松狮吃什么食物好?松狮的营养食谱及喂养注意事项松狮吃什么食物好?相信一些饲...[详细]
家居百科2022.06.12
-
杜高犬太凶了要这么纠正位置
杜高犬太凶了要这么纠正?杜高犬太凶了要这么纠正? 10:57:33出处:络点击:57 导读: 家里狗狗...[详细]
家居百科2022.06.12
-
杜高犬喜欢咬人要怎么办位置
杜高犬喜欢咬人要怎么办?杜高犬喜欢咬人要怎么办? 10:45:06出处:络点击:55 导读: 狗狗喜欢...[详细]
家居百科2022.06.12