记录一下C++ 编码转换的函数:

 #pragma once
#include "afx.h" #define DEFAULT_CODE 0
#define CHINESE_SIMPLIFIED 1
#define CHINESE_TRADITIONAL 2 class CChineseConvertor:
//public CObject
{
public:
CChineseConvertor(void);
~CChineseConvertor(void);
LPSTR Big52GBKSimplified(char * szText);
LPSTR Big52GBKTraditional(char * szText);
LPSTR GBK2Big5(char * szText);
LPSTR GBKSimplified2GBKTraditional(char * szSimplified);
LPSTR GBKTraditional2GBKSimplified(char * szTraditional);
LPWSTR UTF82UNICODE(char* utf8str);
LPSTR UNICODE2UTF8(LPCWSTR strText); char *m_pszUnknown;
// 转换到Unicode
LPWSTR ToUnicode(char * szSource, int nEncoding);
LPSTR ToMultiByte(LPCWSTR szSource, int nEncoding);
};
 #include "stdafx.h"
#include "Coding.h" CChineseConvertor::CChineseConvertor(void)
{
m_pszUnknown = new char[];
m_pszUnknown[]=' ';
m_pszUnknown[]=;
} CChineseConvertor::~CChineseConvertor(void)
{
delete[] m_pszUnknown;
m_pszUnknown = NULL;
} //big5 to GBK_简体
LPSTR CChineseConvertor::Big52GBKSimplified(char * szText)
{
int nLength;
wchar_t *pBuffer;
LPSTR pResult;
int nResultLength; nLength=MultiByteToWideChar(,,szText,strlen(szText),NULL,);
pBuffer=new wchar_t[nLength+];
MultiByteToWideChar(,,(LPCSTR)szText,strlen(szText),(LPWSTR)pBuffer,nLength);
pBuffer[nLength]=; nResultLength=WideCharToMultiByte(,,pBuffer,nLength,NULL,,m_pszUnknown,FALSE);
pResult=new char[nResultLength+];
WideCharToMultiByte(,,(LPWSTR)pBuffer,nLength,(LPSTR)pResult,nResultLength," ",FALSE);
pResult[nResultLength]=; return GBKTraditional2GBKSimplified(pResult); } //big5 to GBK_繁体
LPSTR CChineseConvertor::Big52GBKTraditional(char * szText)
{
int nLength;
wchar_t *pBuffer;
LPSTR pResult;
int nResultLength; nLength=MultiByteToWideChar(,,szText,strlen(szText),NULL,);
pBuffer=new wchar_t[nLength+];
MultiByteToWideChar(,,(LPCSTR)szText,strlen(szText),(LPWSTR)pBuffer,nLength);
pBuffer[nLength]=; nResultLength=WideCharToMultiByte(,,pBuffer,nLength,NULL,,m_pszUnknown,FALSE);
pResult=new char[nResultLength+];
WideCharToMultiByte(,,(LPWSTR)pBuffer,nLength,(LPSTR)pResult,nResultLength," ",FALSE);
pResult[nResultLength]=; return pResult;
} //GBK_简体 to GBK_繁体
LPSTR CChineseConvertor::GBKTraditional2GBKSimplified(char * szTraditional)
{
LCID dwLocale;
WORD wLangID;
wLangID=MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED);
dwLocale=MAKELCID(wLangID,SORT_CHINESE_PRC); int nLength;
char *pBuffer;
nLength=LCMapStringA(dwLocale,LCMAP_SIMPLIFIED_CHINESE,(LPCSTR)szTraditional,strlen(szTraditional),NULL,);
pBuffer=new char[nLength+];
pBuffer[nLength]=;
LCMapStringA(dwLocale,LCMAP_SIMPLIFIED_CHINESE,(LPCSTR)szTraditional,strlen(szTraditional),pBuffer,nLength);
return pBuffer;
} //GBK_简体 to big5
LPSTR CChineseConvertor::GBK2Big5(char * szText)
{
LPSTR szGBKTraditional;
int nLength;
wchar_t *pBuffer;
LPSTR pResult;
int nResultLength; szGBKTraditional=GBKSimplified2GBKTraditional(szText);
nLength=MultiByteToWideChar(,,szGBKTraditional,strlen(szGBKTraditional),NULL,);
pBuffer=new wchar_t[nLength+];
MultiByteToWideChar(,,(LPCSTR)szGBKTraditional,strlen(szGBKTraditional),(LPWSTR)pBuffer,nLength);
pBuffer[nLength]=; nResultLength=WideCharToMultiByte(,,pBuffer,nLength,NULL,,m_pszUnknown,FALSE);
pResult=new char[nResultLength+];
WideCharToMultiByte(,,(LPWSTR)pBuffer,nLength,(LPSTR)pResult,nResultLength," ",FALSE);
pResult[nResultLength]=; return pResult;
} //将GBK的简体转换到GBK繁体
LPSTR CChineseConvertor::GBKSimplified2GBKTraditional(char * szSimplified)
{
LCID dwLocale;
WORD wLangID;
wLangID=MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED);
dwLocale=MAKELCID(wLangID,SORT_CHINESE_PRC); int nLength;
char *pBuffer;
nLength=LCMapStringA(dwLocale,LCMAP_TRADITIONAL_CHINESE,(LPCSTR)szSimplified,strlen(szSimplified),NULL,);
pBuffer=new char[nLength+];
pBuffer[nLength]=;
LCMapStringA(dwLocale,LCMAP_TRADITIONAL_CHINESE,(LPCSTR)szSimplified,strlen(szSimplified),pBuffer,nLength);
return pBuffer;
} // 转换到Unicode
LPWSTR CChineseConvertor::ToUnicode(char * szSource, int nEncoding)
{
int nLength;
wchar_t *pBuffer;
int nLanguage; if(nEncoding==CHINESE_SIMPLIFIED)
nLanguage=;
else
if(nEncoding==CHINESE_TRADITIONAL)
nLanguage=;
else
nLanguage= CP_ACP; nLength=MultiByteToWideChar(nLanguage,,szSource,strlen(szSource),NULL,);
pBuffer=new wchar_t[nLength+];
MultiByteToWideChar(nLanguage,,(LPCSTR)szSource,strlen(szSource),(LPWSTR)pBuffer,nLength);
pBuffer[nLength]=; return pBuffer;
} //转换到多字节
LPSTR CChineseConvertor::ToMultiByte(LPCWSTR szSource, int nEncoding)
{
int nLength;
char *pBuffer;
int nLanguage; if(nEncoding==CHINESE_SIMPLIFIED)
nLanguage=;
else
if(nEncoding==CHINESE_TRADITIONAL)
nLanguage=;
else
nLanguage= CP_ACP; nLength=WideCharToMultiByte(nLanguage,,szSource,wcslen(szSource),NULL,,m_pszUnknown,FALSE); pBuffer=new char[nLength+];
WideCharToMultiByte(nLanguage,,szSource,wcslen(szSource),pBuffer,nLength,m_pszUnknown,FALSE);
pBuffer[nLength]=; return pBuffer; } //UTF8转换到UNICODE
LPWSTR CChineseConvertor::UTF82UNICODE(char* utf8str)
{
int nLength;
wchar_t *pBuffer; nLength=MultiByteToWideChar(CP_UTF8,,utf8str,strlen(utf8str),NULL,);
pBuffer=new wchar_t[nLength+];
MultiByteToWideChar(CP_UTF8,,(LPCSTR)utf8str,strlen(utf8str),(LPWSTR)pBuffer,nLength);
pBuffer[nLength]=; return pBuffer;
} //UNICODE转换到UTF8
LPSTR CChineseConvertor::UNICODE2UTF8(LPCWSTR strText)
{
int len;
len = WideCharToMultiByte(CP_UTF8, , (LPCWSTR)strText, -, NULL, , NULL, NULL);
char *szUtf8=new char[*(len + )];
memset(szUtf8, , len * + ); //UTF8最多的字节数最多是一个UINICODE字符所占字节数的两倍
WideCharToMultiByte (CP_UTF8, , (LPCWSTR)strText, -, szUtf8, len, NULL,NULL);
return szUtf8; }

C++ 字符编码转换类的更多相关文章

  1. 编码问题 php字符编码转换类

    各种平台和软件打开显示的编码问题,需要使用不同的编码,根据我们不同的需求. php 字符编码转换类,支持ANSI.Unicode.Unicode big endian.UTF-8.UTF-8+Bom ...

  2. iconv字符编码转换

    转自 http://blog.csdn.net/langresser_king/article/details/7459367 iconv(http://www.gnu.org/software/li ...

  3. php字符编码转换之gb2312转为utf8(转)

    在php中字符编码转换我们一般会用到iconv与mb_convert_encoding进行操作,但是mb_convert_encoding在转换性能上比iconv要差很多哦.string iconv ...

  4. Char Tools,方便的字符编码转换小工具

    工作关系,常有字符编码转换方面的需要,写了这个小工具 Char Tools是一款方便的字符编码转换小工具,基于.Net Framework 2.0 Winform开发 主要功能 URL编码:URLEn ...

  5. php 字符编码转换函数 iconv mb_convert_encoding比较

    在使用PHP处理字符串时,我们经常会碰到字符编码转换的问题,你碰到过iconv转换失败吗? 发现问题时,网上搜了搜,才发现iconv原来有bug ,碰到一些生僻字就会无法转换,当然了配置第二个参数时, ...

  6. Python—字符编码转换、函数基本操作

    字符编码转换 函数 #声明文件编码,格式如下: #-*- coding:utf-8 -*- 注意此处只是声明了文件编码格式,python的默认编码还是unicode 字符编码转换: import sy ...

  7. day4学python 字符编码转换+元组概念

    字符编码转换+元组概念 字符编码转换 #coding:gbk //此处必声明 文件编码(看右下角编码格式) #用来得到python默认编码 import sys print(sys.getdefaul ...

  8. erlang中字符编码转换(转)

    转自:http://www.thinksaas.cn/group/topic/244329/ 功能说明: erlang中对各种语言的编码支持不足,此代码是使用erlang驱动了著名的iconv编码库来 ...

  9. Qt代码区字符编码转换

    在做通讯练习的时候,发现发送给小助手字符乱码,图片如下 本人Qt Creator是UTF-8,需要改成gbk,代码如下 #include<QTextCodec> // 提供字符编码转换 Q ...

随机推荐

  1. sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory

    在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory. 分析:这是不同系统编码格式引起的:在windows系统中 ...

  2. Redis集群~StackExchange.redis连接Twemproxy代理服务器

    回到目录 本文是Redis集群系列的一篇文章,主要介绍使用StackExchange.Redis进行Twemproxy(文中简称TW)代理服务的连接过程,事务上,对于TW来说,我们需要理解一下它的物理 ...

  3. memcached SASLAUTH 启动

    1.环境描述: Linux 服务器,memcached1.4.5 登录linux的用户名tuxedo,密码tuxedo 2.启动memcached sasl认证 p.p1 { margin: 0.0p ...

  4. 19.在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?)写出http常见的状态码和含义,至少5个.[完善题目]

    状态401代表未被授权,header("Location:www.xxx.php"); 100-199 用于指定客户端应相应的某些动作. 200-299 用于表示请求成功. 300 ...

  5. FRM-40400:事务完成:已应用和保存X条记录"消息框不显示处理方法

    oldmesl := :system.message_level; :system.message_level :;--不显示长度超过25的信息 do_key('COMMIT_FORM'); :sys ...

  6. C语言 05 数组

    数组作为函数参数,可以省略元素个数. 数组作为函数参数,传递是整个数组的地址,修改函数形参数组的值,会影响到外面的 实参数组. 基本数据类型作为函数参数,传递是数值.

  7. ES搜索引擎-简单入门

    基本概念: 索引Index es吧数据放到一个或者多个索引中,如果用关系型数据库模型对比,索引的地位与数据库实例(db)相当.索引存放和读取的基本单元是文档(document).es内部使用的是apa ...

  8. lnmp搭建

    一,安装php1,列出php php-fpm是否存在yum list php php-fpm2,安装yum -y install php php-fpm3,启动php-fpm:/etc/init.d/ ...

  9. bzoj3223 文艺平衡树

    传送门 :http://www.lydsy.com/JudgeOnline/problem.php?id=3223 splay区间翻转的基础题,然而我还是调了一晚上(蒟蒻的悲哀) #include & ...

  10. bootstrop框架

    bootstrop基本的基础了解有如上图.. 下载源码 从GitHub可以直接下载到Bootstrap最新版本的LESS和JavaScript源码. Clone or fork via GitHub ...