编码转化(BIG5)

dstchunlei 2013-06-07 11:30:43
vc建立工程时选择:资源-英语(美国) 不选(使用uniode库)的情况将0x6C78D8766C006F0067006F002E006A0070006700转化为繁体。
需要在台湾本地不出现乱码,我尝试了好多转化方式在本地都是正常的,但是到了台湾就是乱码了。
哪位给台湾人开发过软件的朋友能分享下经验,最好能附上代码。
非常感谢,感激不尽。
...全文
561 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gz_qmc 2013-10-24
  • 打赏
  • 举报
回复
//GB2312 转换成 Unicode: 
wchar_t* GB2312ToUnicode(char* szBuf)
{
	int nLen=MultiByteToWideChar(936,0,szBuf,-1,NULL,0);
	wchar_t* pBuffer = new wchar_t[nLen+1];
	MultiByteToWideChar(936,0,szBuf,-1,pBuffer,nLen);
	pBuffer[nLen]=0;
	return pBuffer;
}

char* UnicodeToBIG5(wchar_t* szBuf)
{
	int nLen=WideCharToMultiByte(950,0,szBuf,-1,NULL,0,NULL,NULL);
	char* pBuffer=new char[nLen+1];
	WideCharToMultiByte(950,0,szBuf,-1,pBuffer,nLen,NULL,NULL);
	pBuffer[nLen]=0;
	return pBuffer;
}
==或者===================================================================
//简体中文 GB2312 转换成 繁体中文BIG5
char* GB2312TBIG5(char* szBuf)
{
	LCID lcid=MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);
	int nLength=LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szBuf,-1,NULL,0);
	char* pBuffer=new char[nLength+1];
	LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szBuf,-1,pBuffer,nLength);
	pBuffer[nLength]=0;
	wchar_t* pUnicodeBuff = GB2312ToUnicode(pBuffer);
	char* pBIG5Buff = UnicodeToBIG5(pUnicodeBuff);
	delete[] pBuffer;
	delete[] pUnicodeBuff;
	return pBIG5Buff;
}
僵哥 2013-10-24
  • 打赏
  • 举报
回复
直接用码表转吧。GBK和BIG5各一张码表,按位置一一对应。
zgl7903 2013-08-13
  • 打赏
  • 举报
回复

  BYTE bVal[]= 
  {
    0x6C,0x78,0xD8,0x76,0x6C,0x00,0x6F,0x00,0x67,0x00,
    0x6F,0x00,0x2E,0x00,0x6A,0x00,0x70,0x00,0x67,0x00,
    0x00,0x00
  };

  WCHAR wchBuff[64]={ 0 };  
  memcpy(wchBuff, bVal, sizeof(bVal));
  MessageBoxW(NULL, wchBuff, L"Source", MB_OK);

  WCHAR wszBig5[64+1] = {0};
  WORD wLanguageID = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED);
  LCID Locale = MAKELCID(wLanguageID, SORT_CHINESE_PRCP);
  if(LCMapStringW(Locale, LCMAP_TRADITIONAL_CHINESE,
    wchBuff, -1, wszBig5, 64*sizeof(TCHAR)) == 0)
  {
    DWORD dwErr = GetLastError();
    ASSERT(0);
  }

  MessageBoxW(NULL, wszBig5, L"BIG5", MB_OK);

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧