C++实现编码转换的示例代码
代码地址
https://github.com/gongluck/Code-snippet/tree/master/cpp/code%20conversion
需求
编码转换在实际开发中经常遇到,通常是ANSI、Unicode和Utf-8之间相互转换。实现也有很多种,有查表法、使用C++11、使用boost、使用系统API。C++11和boost几乎可以实现一套代码,在linux和windows都能使用,但实际会有很多坑,相当于代码几乎不改,但是要改一下系统环境。所以有一种实现就是判断系统的版本,然后选择不同的系统api进行编码转换。
实现
目前只实现Windows下的编码转换,以后需要在linux下使用编码转换再做补充。windows下的编码转换基本围绕unicode做处理。例如ANSI->UTF-8,就是先将ANSI->unicode,再将unicode->UTF-8。
//convert.h /* *@Author:gongluck *@Date:2020-03-2316:06:23 *@LastModifiedby:gongluck *@LastModifiedtime:2020-03-2316:09:30 */ //Characterencodingconversion #pragmaonce #includenamespacegconvert { //ANSI->Unicode intansi2uni(conststd::string&ansi,std::wstring&uni); //Unicode->ANSI intuni2ansi(conststd::wstring&uni,std::string&ansi); //UTF8->Unicode intutf82uni(conststd::string&utf8,std::wstring&uni); //Unicode->UTF8 intuni2utf8(conststd::wstring&uni,std::string&utf8); //ANSI->UTF8 intansi2utf8(conststd::string&ansi,std::string&utf8); //UTF8->ANSI intutf82ansi(conststd::string&utf8,std::string&ansi); }//namespacegconvert
//convert.cpp /* *@Author:gongluck *@Date:2020-03-2316:13:01 *@LastModifiedby:gongluck *@LastModifiedtime:2020-03-2316:34:50 */ #include"convert.h" #include#ifdef_WIN32 #include #endif namespacegconvert { #ifdef_WIN32 staticintmulti2uni(conststd::string&multi,std::wstring&uni,UINTcode) { autolen=MultiByteToWideChar(code,0,multi.c_str(),-1,nullptr,0); if(len<=0) { std::cerr<<__FILE__<<":"<<__LINE__<<":"< Unicode intansi2uni(conststd::string&ansi,std::wstring&uni) { #ifdef_WIN32 returnmulti2uni(ansi,uni,CP_ACP); #endif return0; } //Unicode->ANSI intuni2ansi(conststd::wstring&uni,std::string&ansi) { #ifdef_WIN32 returnuni2multi(uni,ansi,CP_ACP); #endif return0; } //UTF8->Unicode intutf82uni(conststd::string&utf8,std::wstring&uni) { #ifdef_WIN32 returnmulti2uni(utf8,uni,CP_UTF8); #endif return0; } //Unicode->UTF8 intuni2utf8(conststd::wstring&uni,std::string&utf8) { #ifdef_WIN32 returnuni2multi(uni,utf8,CP_UTF8); #endif return0; } //ANSI->UTF8 intansi2utf8(conststd::string&ansi,std::string&utf8) { std::wstringuni; autolen=ansi2uni(ansi,uni); if(len<=0) { return-3; } returnuni2utf8(uni,utf8); } //UTF8->ANSI intutf82ansi(conststd::string&utf8,std::string&ansi) { std::wstringuni; autolen=utf82uni(utf8,uni); if(len<=0) { return-3; } returnuni2ansi(uni,ansi); } }//namespacegconvert
//testcode #include#include"../codeconversion/convert.h" intmain() { std::stringansi="你好,世界!"; std::wstringuni; std::stringutf8; ret=gconvert::ansi2uni(ansi,uni); ret=gconvert::ansi2utf8(ansi,utf8); ret=gconvert::uni2ansi(uni,ansi); ret=gconvert::uni2utf8(uni,utf8); ret=gconvert::utf82ansi(utf8,ansi); ret=gconvert::utf82uni(utf8,uni); return0; }
以上就是C++实现编码转换的示例代码的详细内容,更多关于C++实现编码转换的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。