Windows和Linux的字符编码转换
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-26
前谈过一篇关于Linux下面Unicode使用的文章.那个主要是针对多字节和宽字符的转换而谈的.今天说的有些类似,主要是windows下面关于字符编码转换和Linux下面的不同.
我移植的那部分程序中,有函数是用来实现UTF-8和GBK之间的转换的.其实其他很多不同类型的字符之间转换都可以用这种方法.
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> { 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); CHAR *lpGBKStr = new CHAR[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; delete []lpUnicodeStr; delete []lpGBKStr; return 0; } 再来看Linux,它已经提供了函数可以实现这一功能,不仅如此,Linux char inbuf[BUFLEN] = "characters convertion"; int main() { char *pin = inbuf; char *pout = outbuf; int inlen = strlen(pin); int outlen = BUFLEN; int retsize; iconv_t cd; cd = iconv_open("UTF-8", "GBK"); if((iconv_t)-1 == cd) { perror("iconv_open error"); return -1; } retsize = iconv(cd, &pin, (size_t *)&inlen, &pout, (size_t *)&outlen); if((size_t)-1 == retsize) { perror("iconv error"); return -2; } if(outlen > 0) { printf("%sn", outbuf); } iconv_close(cd); return 0; } |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: Linux Bash下如何实现快捷键效果下一篇: vsftpd配置手册(1)
关于Windows和Linux的字符编码转换的所有评论