最近老遇到C/C++中中文汉字或符号 编码的问题,网上的大部分资料都是依赖第三方的库来解决的,这里给大家分享一个非库函数实现的编码转换补充。

如下图所示:在Windows下控制台程序中,加载UTF8的文件时候,会出现中文的乱码问题,这让我是非常头疼的。

经过一番解决,最后采用最原始的方式来解决了这个问题!!!
如下图所示:


- const unsigned short gb2312table[20902] =
- {
- 0xd2bb,0xb6a1,0x8140,0xc6df,0x8141,0x8142,0x8143,0xcdf2,0xd5c9,0xc8fd,0xc9cf,0xcfc2,0xd8a2,0xb2bb,0xd3eb,0x8144,
- ..........
- 0xd9df,0xfd97,0xfd98,0xfd99,0xfd9a,0xfd9b
- };
详细见:GB2312中文编码库-数据集文档类资源-CSDN文库
附上主要实现代码:
- static char pszBufOut[4300];
- char* GBK_Format(const unsigned char* pszBufIn)
- {
- int i = 0;
- int j = 0, nLen;
- unsigned short unicode;
- unsigned short gbk;
- int nBufInLen = 0;
- if (pszBufIn == NULL)
- return NULL;
- nBufInLen = strlen((char*)pszBufIn);
- for(; i < nBufInLen; i++, j++)
- {
- if((pszBufIn[i] & 0x80) == 0x00)
- {
- nLen = 1;
- pszBufOut[j]= pszBufIn[i];
- }
- else if ((pszBufIn[i] & 0xF0) == 0xE0)
- {
-
- if (i+ 2 >= nBufInLen) return NULL;
- unicode = (((int)(pszBufIn[i] & 0x0F)) << 12) | (((int)(pszBufIn[i+1] & 0x3F)) << 6) | (pszBufIn[i+2] & 0x3F);
- gbk = gb2312table[unicode-0x4e00];
- pszBufOut[j]= gbk/256;
- pszBufOut[j+1] = gbk%256;
- j++;
- i+=2;
- }
- else
- {
- return NULL;
- }
- }
- return pszBufOut;
- }