博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编码转换
阅读量:6714 次
发布时间:2019-06-25

本文共 5583 字,大约阅读时间需要 18 分钟。

1、

TzEncodingWindows.cpp

#include "TzEncodingWindows.h"#ifdef BUILD_IN_WIN32    #include 
#include
#include
#include
#include
using namespace std;#endif// BUILD_IN_WIN32TzEncodingWindows::TzEncodingWindows(){}TzEncodingWindows::~TzEncodingWindows(){}#ifdef BUILD_IN_WIN32//*// ZC: 下面的代码来自网络:// http://www.cnblogs.com/lidabo/p/3903620.html // ZC: Ansi-->Unicode std::wstring MBytesToWString(const char* lpcszString) { //int len = strlen(lpcszString); int unicodeLen = ::MultiByteToWideChar(CP_ACP, 0, lpcszString, -1, NULL, 0); wchar_t* pUnicode = new wchar_t[unicodeLen + 1]; memset(pUnicode, 0, (unicodeLen + 1) * sizeof(wchar_t)); ::MultiByteToWideChar(CP_ACP, 0, lpcszString, -1, (LPWSTR)pUnicode, unicodeLen); wstring wString = (wchar_t*)pUnicode; delete [] pUnicode; return wString; } // ZC: Unicode-->Ansi std::string WStringToMBytes(const wchar_t* lpwcszWString) { char* pElementText; int iTextLen; // wide char to multi char iTextLen = ::WideCharToMultiByte(CP_ACP, 0, lpwcszWString, -1, NULL, 0, NULL, NULL); pElementText = new char[iTextLen + 1]; memset((void*)pElementText, 0, (iTextLen + 1) * sizeof(char)); ::WideCharToMultiByte(CP_ACP, 0, lpwcszWString, 0, pElementText, iTextLen, NULL, NULL); std::string strReturn(pElementText); delete [] pElementText; return strReturn; } // ZC: Utf8-->Unicode std::wstring UTF8ToWString(const char* lpcszString) { //int len = strlen(lpcszString); int unicodeLen = ::MultiByteToWideChar(CP_UTF8, 0, lpcszString, -1, NULL, 0); wchar_t* pUnicode; pUnicode = new wchar_t[unicodeLen + 1]; memset((void*)pUnicode, 0, (unicodeLen + 1) * sizeof(wchar_t)); ::MultiByteToWideChar(CP_UTF8, 0, lpcszString, -1, (LPWSTR)pUnicode, unicodeLen); wstring wstrReturn(pUnicode); delete [] pUnicode; return wstrReturn; } // ZC: Unicode-->Utf8 std::string WStringToUTF8(const wchar_t* lpwcszWString) { char* pElementText; int iTextLen = ::WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)lpwcszWString, -1, NULL, 0, NULL, NULL); pElementText = new char[iTextLen + 1]; memset((void*)pElementText, 0, (iTextLen + 1) * sizeof(char)); ::WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)lpwcszWString, -1, pElementText, iTextLen, NULL, NULL); std::string strReturn(pElementText); delete [] pElementText; return strReturn; }//*/void TzEncodingWindows::Test_Ansi2Utf8(){ qDebug() << "Hello : "+QString::number(sizeof(char));//* char* lpcszString = "50路"; //::MessageBoxA(0, lpcszString, "MessageBoxA - 1", 0); QString str = QString::fromUtf8(lpcszString); qDebug() << "lpcszString : "+QString::fromUtf8(lpcszString); qDebug() << "str.length() : "+ QString::number(str.length()); QByteArray byteArr = str.toUtf8(); qDebug() << "byteArr.length() : "+QString::number(byteArr.length()); for (int i=0; i
87 qDebug() << "WideCharToMultiByte return : "+QString::number(iRtn)+" -> GetLastError : "+QString::number(::GetLastError()); ::MessageBoxA(0, pElementText, "MessageBoxA", 0); for (int i=0; i
"+QString::number((int)pElementText[i], 16); } std::string strReturn(pElementText); qDebug() << "strReturn : " + QString::fromStdString(strReturn);// delete [] pUnicode;// delete [] pElementText;//*/}#endif// BUILD_IN_WIN32

 

2、

TzEncodingLinux.cpp

#include "TzEncodingLinux.h"#include 
#include
#include
//#pragma comment(lib, "iconv.lib") // ZC: 改放到 .pro文件中“LIBS += -liconv”TzEncodingLinux::TzEncodingLinux(){}TzEncodingLinux::~TzEncodingLinux(){}/*//此函数说明将要进行哪两种编码的转换,tocode是目标编码,fromcode是原编码,该函数返回一个转换句柄,供以下两个函数使用。(1) iconv_t iconv_open(const char *tocode, const char *fromcode);//此函数从inbuf中读取字符,转换后输出到outbuf中,inbytesleft用以记录还未转换的字符数,outbytesleft用以记录输出缓冲的剩余空间。(2) size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *outbytesleft);//此函数用于关闭转换句柄,释放资源。(3) int iconv_close(iconv_t cd);*/// - - - - - - - 以下是在Linux上实现的字符集转换函数//int code_convert(char *from_charset,char *to_charset,const char *inbuf, size_t inlen,char *outbuf, size_t outlen)int code_convert(char *from_charset,char *to_charset, char *inbuf, size_t inlen,char *outbuf, size_t outlen){ iconv_t cd; //const char **pin = &inbuf; char **pin = &inbuf; char **pout = &outbuf; cd = iconv_open(to_charset,from_charset); if (cd==0) return -1; memset(outbuf,0,outlen); if (iconv(cd, pin, &inlen,pout, &outlen)==((size_t)-1)) return -1; iconv_close(cd); return 0;}/* UTF-8 to UTF-16 *///int u2g(const char *inbuf, size_t inlen, char *outbuf, size_t outlen)int u2g(char *inbuf, size_t inlen, char *outbuf, size_t outlen){ return code_convert("UTF-8","UTF-16",inbuf,inlen,outbuf,outlen);}/* UTF-16 to UTF-8 *///int g2u(const char *inbuf, size_t inlen, char *outbuf, size_t outlen)int g2u(char *inbuf, size_t inlen, char *outbuf, size_t outlen){ return code_convert("UTF-16", "UTF-8", inbuf, inlen, outbuf, outlen);}// - - - - - - - 以上是在Linux上实现的字符集转换函数

 

知识点来自网络,具体哪个网页 忘掉了...

代码来自“czgj”,代码保存于:百度云

 

转载于:https://www.cnblogs.com/CodeSkill/p/5082778.html

你可能感兴趣的文章
马云:未来,我坚信区块链,所有企业都是制造业 ...
查看>>
增加关系型数据库驱动配置同步任务
查看>>
Spotify敏捷模式详解三部曲第二篇:研发过程
查看>>
海康威视高级副总裁浦世亮:我们为什么要推出“AI开放平台”? ...
查看>>
kinmall分析区块链的发展前景和未来趋势
查看>>
企业级java springboot b2bc商城系统开源源码二次开发:服务消费(Ribbon) ...
查看>>
Linux基础命令---网卡操作
查看>>
Linux 磁盘管理基础知识全汇总
查看>>
搭建直播平台需要从CDN“内部”入手
查看>>
Ubuntu下“E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)” ...
查看>>
【南京站报名中!】微服务框架到生态,Apache Dubbo 开发者沙龙
查看>>
linux find xargs
查看>>
家纺行业运行大数据正式发布:告诉你家纺行业形势
查看>>
Android多线程源码详解一:handler、looper、message、messageQueue
查看>>
wordpress robot设置
查看>>
unity3d 中控制手机前后摄像头切换
查看>>
MyCAT核心配置详解
查看>>
selenium启动Chrome配置参数问题
查看>>
刚刚,2018年度中国科学十大进展正式发布!
查看>>
为什么游戏服务端用开发效率低的C++来写,其他语言无法胜任吗?
查看>>