admin 管理员组

文章数量: 1184232


2024年3月12日发(作者:linux系统ip地址配置文件)

前谈过一篇关于Linux下面Unicode使用的文章。那个主要是针对多字节和宽字符的

转换而谈的。今天说的有些类似,主要是windows下面关于字符编码转换和Linux下面

的不同。

我移植的那部分程序中,有函数是用来实现UTF-8和GBK之间的转换的。其实其他

很多不同类型的字符之间转换都可以用这种方法。

先说windows。因为windows下面没有函数可以实现这一功能,所以得自己写。思

路很简单,就是利用之前讲过的那两个函数来实现,即:MultiByteToWideChar和Wide

CharToMultiByte来实现。先将其中一种编码(如UTF-8)利用MultiByteToWideChar

转换为宽字节,然后再利用WideCharToMultiByte转换为另一种编码(如GBK)。反过来

也是一样的。

下面给出代码:

LONG UTF8ToGBK(const void * lpUTF8Str, string & str)

{

if(lpUTF8Str == NULL) return -1;

int nRetLen = 0;

//获取转换到Unicode编码后所需要的字符空间长度

nRetLen = ::MultiByteToWideChar(CP_UTF8, 0,

(char *)lpUTF8Str, -1, NULL, NULL);

WCHAR *lpUnicodeStr = new WCHAR[nRetLen + 1];

//为Unicode字符串空间

//转换到Unicode编码

nRetLen = ::MultiByteToWideChar(CP_UTF8, 0,

(char *)lpUTF8Str, -1, lpUnicodeStr, nRetLen);

if(!nRetLen)

{

delete []lpUnicodeStr; return -1;

}

//获取转换到GBK编码后所需要的字符空间长度

nRetLen = ::WideCharToMultiByte(CP_ACP, 0, lpUnicodeStr,

-1, NULL, NULL, NULL, NULL);


本文标签: 转换 实现 函数 字符 编码