Windows和Linu的字符编码互转的方法.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

前谈过一篇关于Linux下面Unicode使用的文章。那个主要是针对多字节和宽字符的转换而谈的。今天说的有些类似,主要是windows下面关于字符编码转换和Linux下面的不同。

我移植的那部分程序中,有函数是用来实现UTF-8和GBK之间的转换的。其实其他很多不同类型的字符之间转换都可以用这种方法。

先说windows。因为windows下面没有函数可以实现这一功能,所以得自己写。思路很简单,就是利用之前讲过的那两个函数来实现,即:MultiByteToWideChar和WideCharToMultiByte来实现。先将其中一种编码(如UTF-8)利用MultiByteToWideChar

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

附加代码:utf-8转为gbk

#ifWIN32

boolUtf8ToGbk(constvoid*utf8Str,char*pStr)

{

if(utf8Str==NULL){returnfalse;

}

intnLen=0;

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

nLen=::MultiByteToWideChar(CP_UTF8,0,(char*)utf8Str,-1,NULL,NULL);WCHAR*unicodeStr=newWCHAR[nLen+1]; //unicode字符串空间;

//转换到unicode编码;

nLen=::MultiByteToWideChar(CP_UTF8,0,(char*)utf8Str,-1,unicodeStr,nLen);if(!nLen){

delete[]unicodeStr;returnfalse;

}

// //

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

nLen=::WideCharToMultiByte(CP_ACP,0,unicodeStr,-1,NULL,NULL,NULL,NULL);CHAR*gbkStr=newCHAR[nLen+1]; //unicode字符串空间;

//转换到gbk编码;

nLen=::WideCharToMultiByte(CP_ACP,0,unicodeStr,-1,gbkStr,nLen,NULL,NULL);if(!nLen){

delete[]gbkStr;returnfalse;

}

strcpy(pStr,gbkStr);delete[]gbkStr;

returntrue;

}

#endif

下面给出代码:

LONGUTF8ToGBK(constvoid*lpUTF8Str,string

LONGUTF8ToGBK(constvoid*lpUTF8Str,stringstr)

{

if(lpUTF8Str==NULL) return-1;

intnRetLen=0;

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

nRetLen=::MultiByteToWideChar(CP_UTF8,0,

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

WCHAR*lpUnicodeStr=newWCHAR[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);

CHAR*lpGBKStr=newCHAR[nRetLen+1];

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

-1,(char*)lpGBKStr,nRetLen,NULL,NULL);

//转换到GBK编码

if(!nRetLen)

{

delete[]lpUnicodeStr;delete[]lpGBKStr;return-2;

}

str=lpGBKStr;d

文档评论(0)

hao187 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档