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);
版权声明:本文标题:Windows和Linux的字符编码转换 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1710218975a563024.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论