c/c++ GB2312编码和UTF-8互转
来源:互联网 发布:ember.js实战 编辑:程序博客网 时间:2024/05/16 11:08
作者:liuguangzhou123
转自:http://blog.csdn.net/liuguangzhou123/article/details/9246245
#include <stdio.h>
#include <Windows.h>
#include <string.h>
/*************************************************
*将GB2312编码的字符串转为UTF-8编码
*输入:
*p:指向待转码字符串
*返回:
*指向已转码字符串的指针
*过程:
*将GB2312转为Unicode编码
*再将Unicode转为UTF-8
*************************************************/
char* Gb2312ToUtf8(char *p){
DWORD dwNum = MultiByteToWideChar(CP_ACP, 0, p, -1, NULL, 0);
char *psText;
wchar_t *pwText = (wchar_t*)malloc(dwNum*sizeof(wchar_t));
dwNum = MultiByteToWideChar(CP_ACP ,0 ,p ,-1 ,pwText ,dwNum );
dwNum = WideCharToMultiByte(CP_UTF8,0,pwText,-1,NULL,0,NULL,NULL);
psText=(char*)malloc(dwNum*sizeof(char));
dwNum = WideCharToMultiByte(CP_UTF8,0,pwText,-1,psText,dwNum,NULL,NULL);
free(pwText);
return psText;
}
/*************************************************
*将UTF-8编码的字符串转为GB2312编码
*输入:
*p:指向待转码字符串
*返回:
*指向已转码字符串的指针
*过程:
*将UTF-8转为Unicode编码
*再将Unicode转为GB2312
*************************************************/
char* Utf8ToGb2312(char *p){
DWORD dwNum = MultiByteToWideChar(CP_UTF8,0,p,-1,NULL,0);
char *psText;
wchar_t *pwText=(wchar_t*)malloc(dwNum*sizeof(wchar_t));
dwNum = MultiByteToWideChar(CP_UTF8,0,p,-1,pwText,dwNum);
dwNum = WideCharToMultiByte(CP_ACP,0,pwText,-1,NULL,0,NULL,NULL);
psText=(char*)malloc(dwNum*sizeof(char));
dwNum = WideCharToMultiByte(CP_ACP,0,pwText,-1,psText,dwNum,NULL,NULL);
free(pwText);
return psText;
}
int main(){
char *source = "Hello world!"; //英文字符串测试
char *result;
result = Gb2312ToUtf8(source);
printf("%s\n",result);
result = Utf8ToGb2312(result);
printf("%s\n",result);
source="测试";
result = Gb2312ToUtf8(source); //中文字符串测试,不支持UTF-8编码汉字,会出现乱码
printf("%s\n",result);
result = Utf8ToGb2312(result);//GB2312编码的汉字则能正常显示
printf("%s\n",result);
system("pause");
return 0;
}
0 0
- c/c++ GB2312编码和UTF-8互转
- c/c++ GB2312编码和UTF-8互转
- C中字符串UTF-8和GB2312互转
- 编码 GB2312 和 UTF-8
- Objective-c NSString 转utf-8和gb2312
- 【C++】UTF-8字符和GB2312字符相互转换函数
- utf-8和gb2312的字符编码
- GBK、GB2312和UTF-8编码区分
- C/C++,字符串的UTF-8与GBK(或GB2312)编码转换
- C/C++,字符串的UTF-8与GBK(或GB2312)编码转换
- C/C++ GB2312,UTF编码互相准确转换
- C/C++ GB2312,UTF编码互相准确转换
- linux C 字符集转换,UTF-8,GB2312
- linux C 字符集转换,UTF-8,GB2312
- IOS编码GB2312与UTF-8互转
- linux下C语言utf-8编码与gb2312转换代码---libiconv
- c语言中关于utf-8编码转换为gb2312的问题
- linux下C语言utf-8编码与gb2312转换代码---libiconv
- MAC搭建svn服务器方法
- Python-Project Euler 43
- Qt编译生成静态库(静态编译)
- instanceof, isInstance, isAssignableFrom
- EasyUI总结
- c/c++ GB2312编码和UTF-8互转
- stm32 UCGUI 完美移植
- 如何在linux系统中设置严密的密码策略(译文)
- SVM学习笔记(1)—Matlab中LibSVM的安装及入门
- Hibernate一对多(双向)
- 无题
- Android 2.1 源码结构分析
- 解析 Qt 字库移植并能显示中文 (上篇)
- POJ 1185 炮兵阵地