Windows下,Unicode、UTF8,GBK(GB2312)互转
GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312
关于Unicode、UTF8,GBK(GB2312) 的介绍见:
UTF-8 、UTF-16、GBK(GB2312)和Unicode_小飞侠hello的博客-CSDN博客
windows下提供了两个编码转换函数:WideCharToMultiByte和MultiByteToWideChar。
用它们可实现Unicode(UCS2),UTF8,GBK(GB2312)互转。
int
WINAPI
MultiByteToWideChar(
__in UINT CodePage,
__in DWORD dwFlags,
__in_bcount(cbMultiByte) LPCSTR lpMultiByteStr,
__in int cbMultiByte,
__out_ecount_opt(cchWideChar) __transfer(lpMultiByteStr) LPWSTR lpWideCharStr,
__in int cchWideChar);
int
WINAPI
WideCharToMultiByte(
__in UINT CodePage,
__in DWORD dwFlags,
__in_ecount(cchWideChar) LPCWSTR lpWideCharStr,
__in int cchWideChar,
__out_bcount_opt(cbMultiByte) __transfer(lpWideCharStr) LPSTR lpMultiByteStr,
__in int cbMultiByte,
__in_opt LPCSTR lpDefaultChar,
__out_opt LPBOOL lpUsedDefaultChar);
第一个参数,CodePage,通常取两个值:
1、CP_UTF8,将UTF8转换成Unicode的时使用。
2、CP_ACP,Ansi Code Page,也就是计算机本地的代码页,中国大陆为936(简体中文),也就是GetACP()的返回值。Unicode转换成GBK相互转换时使用。
UTF8 转换成GBK2312
char* UtfToGbk(const char* utf8);
char* CWininetHttp::UtfToGbk(const char* utf8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len + 1];
memset(wstr, 0, len + 1);
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len + 1];
memset(str, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
if (wstr) delete[] wstr;
return str;
}
gb2312_to_utf8
string gb2312_to_utf8(const char* gb2312)
{
int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len + 1];
memset(wstr, 0, len + 1);
MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len + 1];
memset(str, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
string strTemp = str;
if (wstr)
delete[] wstr;
if (str)
delete[] str;
return strTemp;
}
Windows下,Unicode、UTF8,GBK(GB2312)互转相关推荐
- java ucs2转utf8_Windows下Unicode(UCS2),UTF8,GBK(GB2312)互转
Windows下提供了两个编码转换函数:WideCharToMultiByte和MultiByteToWideChar. 用它们可实现Unicode(UCS2),UTF8,GBK(GB2312)互转. ...
- ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别
ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别 最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总 结网上一些朋友提供的 asc ...
- 计算机ucs汉字编码,字符编码基础知识 - Unicode,UCS,GBK,GB2312,UTF-8
字符编码基础知识- Unicode,UCS,GBK,GB2312,UTF-8 最近遇到一个Unicode和UTF-8关系比较的问题,之前在处理中文显示时也遇到过类似的问题,于是花时间学习了一下,在此做 ...
- 字符在utf-8,gbk,gb2312,iso8859-1下的编码实验
一直以来对编码并不是太理解,所以用java做了个实验,感觉清楚了点: 下面这个代码的功能是,获取某个字符或汉字在utf-8,gbk,gb2312,iso8859-1等下的十六进制,八进制,十进制,二进 ...
- 字符编码详解及由来(UNICODE,UTF-8,GBK)
字符编码详解及由来(UNICODE,UTF-8,GBK) 各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK) - 2009-01-29 09:53 一直对 ...
- VB 实现UTF-8 与GB2312互转
模块代码如下: '* ************************************** * '* 模块名称:modCharset.bas '* 模块功能:GB2312与UTF8相互转换函数 ...
- utf-8,gbk,gb2312区别
很多用户问GBK与UTF-8版本有什么区别,这边作了个整理如下: KesionCMS的GBK版本与UTF-8版本功能是一样的.只不过编码方式不同. GBK的文字编码是双字节来表示的,即不论中.英文字符 ...
- UTF-8 GBK GB2312 之间的区别和关系
UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM.是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三 ...
- Windows下打印utf-8文件
估计入门时都会遇到的.我是在windows下用的Python25自带的IDLE编辑运行的,发现运行脚本得出的结果有一些中文显示是乱码,但有一些是 正常的.百思不得其解.首先查看了一下源文件的编码格式, ...
- ASP字符转换:UTF-8与GB2312互转
UTF-8转GB2312函数 <% '用途:將UTF-8編碼漢字轉換為GB2312碼,兼容英文和數字 '版權:雖說是原創,其實也參考了別人的部分算法 '用法:Response.write UTF ...
最新文章
- [16] 螺旋面(Spire)图形的生成算法
- 如何网络推广教你如何网站排名“更上一层楼”?
- 多台服务器搭建Spark集群
- 大数据笔记(三十二)——SparkStreaming集成Kafka与Flume
- 一个月后的2016产品汪温馨提示
- b 树查找时间复杂度_你心里是没点B树吗?
- linux课堂笔记(7)
- InnoDB的Buffer Pool简介
- kotlin android 注解,注解 - Kotlin 语言中文站
- user32.dll 函数说明小结
- Marlin固件串口功能解析和程序移植
- 计算机显示网络无权限访问权限,小编教你电脑显示无internet访问权限怎么办
- 75---Python绘制动态狄拉克delta函数
- 关于网络性能的一些指标
- PS 图片部分位置调亮
- 【NOI模拟赛】黑色大桥(DP优化,李超树)
- java 实现文件内容的加密和解密
- 中国商用显示行业“十四五”前景规划及发展方向分析报告2022-2027年版
- 使用PIL将白底黑字图片转为透明底白字
- 如何判断时间是否在跨天的时间段之内