vc中GB2312,BIG5,Unicode编码转换
本文主要讨论的是VC编译环境下,实现字符串和文件编码方式转换的实现,linux下请使用Strconv.
一、文件编码格式转换
//GB2312 编码文件转换成 Unicode:
if((file_handle = fopen(filenam,"rb")) != NULL)
{
//从GB2312源文件以二进制的方式读取buffer
numread = fread(str_buf_pool,sizeof(char),POOL_BUFF_SIZE,file_handle);
fclose(file_handle);
//GB2312文件buffer转换成UNICODE
nLen =MultiByteToWideChar(CP_ACP,0,str_buf_pool,-1,NULL,0);
MultiByteToWideChar(CP_ACP,0,str_buf_pool,-1,(LPWSTR)str_unicode_buf_pool,nLen);
//组装UNICODE Little Endian编码文件文件头标示符"0xFF 0xFE"
//备注:UNICODE Big Endian编码文件文件头标示符"0xFF 0xFE"
//Little Endian与Big Endian编码差异此处不详述
unicode_little_file_header[0]=0xFF;
unicode_little_file_header[1]=0xFE;
//存储目标文件
if((file_handle=fopen(filenewname,"wb+")) != NULL)
{
fwrite(unicode_little_file_header,sizeof(char),2,file_handle);
numwrite = fwrite(str_unicode_buf_pool,sizeof(LPWSTR),nLen,file_handle);
fclose(file_handle);
}
}
二、字符串编码格式转换
//GB2312 转换成 Unicode:
wchar_t* GB2312ToUnicode(const char* szGBString)
{
UINT nCodePage = 936; //GB2312
int nLength=MultiByteToWideChar(nCodePage,0,szGBString,-1,NULL,0);
wchar_t* pBuffer = new wchar_t[nLength+1];
MultiByteToWideChar(nCodePage,0,szGBString,-1,pBuffer,nLength);
pBuffer[nLength]=0;
return pBuffer;
}
//BIG5 转换成 Unicode:
wchar_t* BIG5ToUnicode(const char* szBIG5String)
{
UINT nCodePage = 950; //BIG5
int nLength=MultiByteToWideChar(nCodePage,0,szBIG5String,-1,NULL,0);
wchar_t* pBuffer = new wchar_t[nLength+1];
MultiByteToWideChar(nCodePage,0,szBIG5String,-1,pBuffer,nLength);
pBuffer[nLength]=0;
return pBuffer;
}
//Unicode 转换成 GB2312:
char* UnicodeToGB2312(const wchar_t* szUnicodeString)
{
UINT nCodePage = 936; //GB2312
int nLength=WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,NULL,0,NULL,NULL);
char* pBuffer=new char[nLength+1];
WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);
pBuffer[nLength]=0;
return pBuffer;
}
//Unicode 转换成 BIG5:
char* UnicodeToBIG5(const wchar_t* szUnicodeString)
{
UINT nCodePage = 950; //BIG5
int nLength=WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,NULL,0,NULL,NULL);
char* pBuffer=new char[nLength+1];
WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);
pBuffer[nLength]=0;
return pBuffer;
}
//繁体中文BIG5 转换成 简体中文 GB2312
char* BIG5ToGB2312(const char* szBIG5String)
{
LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);
wchar_t* szUnicodeBuff = BIG5ToUnicode(szBIG5String);
char* szGB2312Buff = UnicodeToGB2312(szUnicodeBuff);
int nLength = LCMapString(lcid,LCMAP_SIMPLIFIED_CHINESE, szGB2312Buff,-1,NULL,0);
char* pBuffer = new char[nLength + 1];
LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE,szGB2312Buff,-1,pBuffer,nLength);
pBuffer[nLength] = 0;
delete[] szUnicodeBuff;
delete[] szGB2312Buff;
return pBuffer;
}
//简体中文 GB2312 转换成 繁体中文BIG5
char* GB2312ToBIG5(const char* szGBString)
{
LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);
int nLength = LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,NULL,0);
char* pBuffer=new char[nLength+1];
LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,pBuffer,nLength);
pBuffer[nLength]=0;
wchar_t* pUnicodeBuff = GB2312ToUnicode(pBuffer);
char* pBIG5Buff = UnicodeToBIG5(pUnicodeBuff);
delete[] pBuffer;
delete[] pUnicodeBuff;
return pBIG5Buff;
}
三、API 函数:MultiByteToWideChar参数说明
第一个参数为代码页, 用 GetLocaleInfo 函数获取当前系统的代码页,936: 简体中文, 950: 繁体中文
第二个参数为选项,一般用 0 就可以了
第三个参数为 ANSI 字符串的地址, 这个字符串是第一个参数指定的语言的 ANSI 字符串 (AnsiString)
第四个参数为 ANSI 字符串的长度,如果用 -1, 就表示是用 0 作为结束符的字符串
第五个参数为转化生成的 unicode 字符串 (WideString) 的地址, 如果为 NULL, 就是代表计算生成的字符串的长度
第六个参数为转化生成的 unicode 字符串缓存的容量,也就是有多少个UNICODE字符。
http://blog.sina.com.cn/s/blog_54c49819010006j0.html~type=v5_one&label=rela_prevarticle
vc中GB2312,BIG5,Unicode编码转换相关推荐
- 关于Laravel中使用response()方法调用json()返回数据unicode编码转换的问题解决
关于Laravel中使用response()方法调用json()返回数据unicode编码转换的问题解决 参考文章: (1)关于Laravel中使用response()方法调用json()返回数据un ...
- JavaScript中字符串与Unicode编码的互相转换
JavaScript中字符串与Unicode编码的互相转换 这段代码演示了JavaScript中字符串与Unicode编码的转换: // 为了控制台的演示方便, 变量没有添加 var 定义 // 实际 ...
- C#-中的字符串及其编码转换
C#中的字符串及其编码转换 (转自:http://blog.sina.com.cn/s/blog_498eab7d0100et7j.html) 根据查找的System.Text.Encoding类的属 ...
- html用unicode编码转换汉字,汉字与Unicode编码相互转换(Js版)
Unicode编码转换工具 //ASCII 转换 Unicode function AsciiToUnicode(){ if (document.getElementById("conten ...
- Qt中文编码和QString类Unicode编码转换
1 window中文GBK编码和Unicode编码转换 //GBK‐> QString QString str = QString::fromLocal8Bit("新浪微博" ...
- C#2005中如何把unicode编码的数字转化为EBCDIC编码
简单介绍:而且在杨晓枫的内心心底处:就算是三把剑攻过来时:嗓子眼发紧!她根本就无力反抗?如梦.和我结婚!低吟道 本文写于:2012年09月30日;陕西周边自驾游路线 计划:而且在杨晓枫的内心心底处:就 ...
- bee 字符串转int_beego中gbk和utf8编码转换问题
beego中gbk和utf8编码转换问题,这个问题非常重要,有时候从gbk采集过来转成utf8也非常重要. func Get_cate_urls(url string) (map[int]string ...
- JavaScript之Unicode编码转换小工具
经常浏览别人的网页时,会看到重要的信息就被加密混淆了,常见的就类似\\u4faf\\u6587\\u658c .\u4faf\u6587\u658c.侯文斌等转换的字符串,相信正常人直接不会看懂的(火 ...
- C语言实现gbk/utf8/unicode编码转换
细说:Unicode, UTF-8, UTF-16, UTF-32, UCS-2, UCS-4 Unicode与UTF-8互转(C语言实现) 不依赖任何系统API,用c语言实现gbk/utf8/uni ...
- html unicode编码转换,JS实现的Unicode编码转换操作示例
本文实例讲述了JS实现的Unicode编码转换操作.分享给大家供大家参考,具体如下: Unicode编码转换 /* *js Unicode编码转换 */ var decToHex = function ...
最新文章
- springboot+druid+mybatis-Plus 配置详解
- vim/vi的使用(Ubuntu12.04)
- pkg-config的使用
- 通过输入流获取的xml格式字符串转为json和map格式
- BZOJ2837 : 小强的形状
- MPAI正式启动端到端的AI编码标准
- 使用IDEA 提交代码到svn
- BugkuCTF-MISC题cisco(writeup)
- pythongui界面复选框数值选择并求和_如何使用Python从图像中分离复选框按钮和复......
- 问题 L: The Hanoi Tower
- hdu 3635 Dragon Balls 并查集应用记录每个点的转移次数
- 寡头时代——新的希望还是?
- android 换机 iphone8,iPhone 8给了安卓用户一个换机理由
- Sudo: unable to initialize policy plugin 解决方法
- easyui学习笔记4—panel的实现
- @Resource和@Autowired小笔记
- php后端技术 有哪些,web后端开发技术有哪些 ?
- 关于Google Chrome浏览器离线安装包下载方法
- 【拍摄日志五】拍摄手法,画面构图,光影关系
- Spring项目使用mkcert制作自签名证书