阿里云虚拟主机的三种常见中文编码的转换方法

作者阿里云代理 文章分类 分类:阿里云虚拟主机 阅读次数 已被围观

目前常用的网站程序代码中常见的三种中文编码是:GB2312(简体中文)、GBK、BIG5(繁体中文),但因为阿里云客户众多,网站代码各异,如果碰到由于网站页面由于编码不一致而导致出现乱码,如何转换。本文主要介绍如何利用 Windows 提供的API 函数来实现。转换涉及到的 API 函数主要有两个:MultiByteToWideChar 和 WideCharToMultiByte。

四个转换函数分别实现如下的转换:

1、Big5 => GBK:

void BIG52GBK(char szBuf)

{

  if(!strcmp(szBuf, ""))

   return;

  int nStrLen = strlen(szBuf);

  wchar_t pws = new wchar_t[nStrLen + 1];

  try

  {

   int nReturn = MultiByteToWideChar(950, 0, szBuf, nStrLen, pws, nStrLen + 1);

   BOOL bValue = false;

   nReturn = WideCharToMultiByte(936, 0, pws, nReturn, szBuf, nStrLen + 1, "?", &bValue);

   szBuf[nReturn] = 0;

  }

  __finally

  {

   delete[] pws;

  }

}

 

2、GBK => Big5

void GBK2BIG5(char szBuf)

{

  if(!strcmp(szBuf, ""))

   return ;

  int nStrLen = strlen(szBuf);

  wchar_t pws = new wchar_t[nStrLen + 1];

  try

  {

   MultiByteToWideChar(936, 0, szBuf, nStrLen, pws, nStrLen + 1);

   BOOL bValue = false;

   WideCharToMultiByte(950, 0, pws, nStrLen, szBuf, nStrLen + 1, "?", &bValue);

   szBuf[nStrLen] = 0;

  }

  finally

  {

   delete[] pws;

  }

}

 

3、GB2312 => GBK

void GB2GBK(char szBuf)

{

  if(!strcmp(szBuf, ""))

   return;

  int nStrLen = strlen(szBuf);

  WORD wLCID = MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_PRC);

  int nReturn = LCMapString(wLCID, LCMAP_TRADITIONAL_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_PRC);

   LCMapString(wLCID, LCMAP_TRADITIONAL_CHINESE, szBuf, nReturn, pcBuf, nReturn + 1);

   strncpy(szBuf, pcBuf, nReturn);

  }

  finally

  {

   delete[] pcBuf;

  }

}

 

4、GBK =〉GB2312

void 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;

  }

}

// 调用示例

   ……

  char sourceEncode[255];

  char szBuf[1024];

  // 从 GB2312 转到 GBK

  strcpy(szBuf, sourceEncode);

  GB2GBK(szBuf);

  // 从GB2312 转到 BIG5,通过 GBK 中转

  strcpy(szBuf, sourceEncode);

  GB2GBK(szBuf);

  GBK2BIG5(szBuf);  

   ……

 

PS:有关 GB2312 =〉BIG5 的转换以及 BIG5 =〉GB2312 的转换可以通过 GBK 间接实现。先将 GB2312 转成 GBK,再将 GBK 转成 BIG5,反之亦然。当然也可以自己实现它们之间的直接转换。


本方法适用于

阿里云虚拟主机
 

以上就是阿里云虚拟主机的三种常见中文编码的转换方法的问题说明。如果问题还未能解决,请联系凯铧互联售后技术支持。阿里云代理商凯铧互联提供阿里云服务器/企业邮箱等阿里云全线产品的代购服务,为您提供阿里云产品专属优惠折扣,通过凯铧互联购买可以获得折上折,若您需要帮助可以直接联系我方客服!同样的品质,更多贴心的服务,阿里云代理商凯铧互联专业技术团队同时为您提供便捷专业的7x24一对一专业全面的技术服务。 电话专线:136-5130-9831,QQ:3398234753。

为什么选择我们:北京凯铧互联科技有限公司(简称凯铧互联)由多名前阿里云资深技术专家创立,核心员工来自阿里巴巴、腾讯等,作为阿里云,华为云,腾讯云,百度云,金山云,华为云重要的合作伙伴,专注于为企业用户提供云计算及基于云服务器的解决方案。总部设在北京,并在内蒙设有办事处。做为一家综合性方案商,凯铧互联向各行业用户提供基于云服务器的各种解决方案。为用户获得优质服务的同时,秉承"专业规划、周到服务"的服务理念,根据用户的实际情况,充分考虑各种网络资源的特点及功效,为用户量身定做一套适合于其实际应用需求的网络应用方案。帮助用户利用互联网的力量展开新的营销方式,并大大缩短了项目实施周期,获得用户的一致好评。 
 
本公司销售:阿里云、腾讯云、百度云、天翼云、金山大米云、金山企业云盘!可签订合同,开具发票。
?