本文主要以实例形式讨论了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字符。
本文向大家介绍C#把UNICODE编码转换为GB编码的实例,包括了C#把UNICODE编码转换为GB编码的实例的使用技巧和注意事项,需要的朋友参考一下 实例如下: 以上这篇C#把UNICODE编码转换为GB编码的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
本文向大家介绍java实现文件编码转换的方法,包括了java实现文件编码转换的方法的使用技巧和注意事项,需要的朋友参考一下 在开发过程中,可能会遇到文件编码的转换,虽然说开发工具eclipse可以转换编码,但是有的情况却很不方便。比如,原来文件本身的编码是GBK,现在要转换成UTF-8,如果直接在eclipse中把文件编码修改成UTF-8,恭喜你,是乱码,因为不能直接从GBK到UTF-8进行转换,
介绍 此工具主要针对类似于\\u4e2d\\u6587这类Unicode字符做一些特殊转换。 使用 字符串转Unicode符 //第二个参数true表示跳过ASCII字符(只跳过可见字符) String s = UnicodeUtil.toUnicode("aaa123中文", true); //结果aaa123\\u4e2d\\u6587 Unicode转字符串 String str = "a
本文向大家介绍趣谈Unicode、Ascii、utf-8、GB2312、GBK等编码知识,包括了趣谈Unicode、Ascii、utf-8、GB2312、GBK等编码知识的使用技巧和注意事项,需要的朋友参考一下 从头讲讲编码的故事。那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起。嗯,也许这样开始比较好…… 很久很久以前,有一群人,他们决定用8个可以开合的晶体管
本文向大家介绍C#实现Json转Unicode的方法,包括了C#实现Json转Unicode的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现Json转Unicode的方法。分享给大家供大家参考之用。具体方法如下: 本文实例主要实现输入为带有json格式的文本,输出正常文本的功能。 具体代码如下: 希望本文所述对大家的C#程序设计有所帮助
本文向大家介绍浅谈Java中Unicode的编码和实现,包括了浅谈Java中Unicode的编码和实现的使用技巧和注意事项,需要的朋友参考一下 Unicode的编码和实现 大概来说,Unicode编码系统可分为编码方式和实现方式两个层次。 编码方式 字符是抽象的最小文本单位。它没有固定的形状(可能是一个字形),而且没有值。“A”是一个字符,“”也是一个字符。字符集是字符的集合。编码字符集是一个字符