字符串处理 - ANSI - Unicode - UTF8 转换
[C语言]字符串处理 - ANSI - Unicode - UTF8 转换
2008-11-4: 使用MultiByteToWideChar和WideCharToMultiByte写的4个ANSI <-> Unicode <-> UTF-8 相互转换的函数。
2008-11-5: 使用C语言标准库mbstowcs和wcstombs写的w2m和m2w两个函数,分别对应ANSI <-> Unicode 相互转换。
2008-11-8: 包装一下 ANSI <-> UTF-8 。

#include <stdio.h>
#include <windows.h>
#include <locale.h>
#define BUFF_SIZE 1024

wchar_t * ANSIToUnicode( const char* str )
{
     int textlen ;
     wchar_t * result;
     textlen = MultiByteToWideChar( CP_ACP, 0, str,-1, NULL,0 ); 
     result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t)); 
     memset(result,0,(textlen+1)*sizeof(wchar_t)); 
     MultiByteToWideChar(CP_ACP, 0,str,-1,(LPWSTR)result,textlen ); 
     return result; 
}

char * UnicodeToANSI( const wchar_t* str )
{
     char* result;
     int textlen;
     textlen = WideCharToMultiByte( CP_ACP, 0, str, -1, NULL, 0, NULL, NULL );
     result =(char *)malloc((textlen+1)*sizeof(char));
     memset( result, 0, sizeof(char) * ( textlen + 1 ) );
     WideCharToMultiByte( CP_ACP, 0, str, -1, result, textlen, NULL, NULL );
     return result;
}

wchar_t * UTF8ToUnicode( const char* str )
{
     int textlen ;
     wchar_t * result;
     textlen = MultiByteToWideChar( CP_UTF8, 0, str,-1, NULL,0 ); 
     result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t)); 
     memset(result,0,(textlen+1)*sizeof(wchar_t)); 
     MultiByteToWideChar(CP_UTF8, 0,str,-1,(LPWSTR)result,textlen ); 
     return result; 
}

char * UnicodeToUTF8( const wchar_t* str )
{
     char* result;
     int textlen;
     textlen = WideCharToMultiByte( CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL );
     result =(char *)malloc((textlen+1)*sizeof(char));
     memset(result, 0, sizeof(char) * ( textlen + 1 ) );
     WideCharToMultiByte( CP_UTF8, 0, str, -1, result, textlen, NULL, NULL );
     return result;
}
/*宽字符转换为多字符Unicode - ANSI*/
char* w2m(const wchar_t* wcs)
{
      int len;
      char* buf;
      len =wcstombs(NULL,wcs,0);
      if (len == 0)
          return NULL;
      buf = (char *)malloc(sizeof(char)*(len+1));
      memset(buf, 0, sizeof(char) *(len+1));
      len =wcstombs(buf,wcs,len+1);
      return buf;
}
/*多字符转换为宽字符ANSI - Unicode*/
wchar_t* m2w(const char* mbs)
{
      int len;
      wchar_t* buf;
      len =mbstowcs(NULL,mbs,0);
      if (len == 0)
          return NULL;
      buf = (wchar_t *)malloc(sizeof(wchar_t)*(len+1));
      memset(buf, 0, sizeof(wchar_t) *(len+1));
      len =mbstowcs(buf,mbs,len+1);
      return buf;
}

char* ANSIToUTF8(const char* str)
{
     return UnicodeToUTF8(ANSIToUnicode(str));
}

char* UTF8ToANSI(const char* str)
{
     return UnicodeToANSI(UTF8ToUnicode(str));
}

int main()
{
     /*使用wcstombs和mbstowcs之前必须调用setlocale,以便决定内码*/
     setlocale(LC_ALL,".936");
     /*假定有一个Unicode(UTF-16LE)编码的文件,将其打开,重新编码为ANSI,写入aa.txt中,再继续编码回Unicode,写入aw.txt中*/
     /*如果不存在a.txt文件,则程序出错,没有做错误处理*/
     char* filename = "a.txt";
     char* filenamea = "aa.txt";
     char* filenamew = "aw.txt";
     FILE*     input=fopen( filename, "rb"); 
     FILE*     inputa=fopen( filenamea, "wb"); 
     FILE*     inputw=fopen( filenamew, "wb"); 
     wchar_t * buf ;
     /*BOE设置,UTF-16LE的BOE为FEFF,如果不先将其读取出来,wcstombs会调用失败*/
     fgetwc(input);
     fputwc(0xFEFF,inputw);
     /*开始读取文件*/
     while(!feof(input))
     {
        buf = (wchar_t *)malloc(sizeof(wchar_t)*BUFF_SIZE)         ;
        memset(buf,    0, sizeof(wchar_t) * BUFF_SIZE );
        fgetws(buf,    BUFF_SIZE,    input);
        fputs(w2m(buf),    inputa);
        fputws(m2w(w2m(buf)),    inputw);
     }
     /*后续处理*/
     fclose(input);
     fclose(inputa);
     fclose(inputw);
     free(buf);

return 0;
}

来自: http://hi.baidu.com/end2012/blog/item/9ff286df5d57bc53cdbf1ab9.html

字符串处理 - ANSI - Unicode - UTF8 转换相关推荐

  1. 字符编码 ansi unicode utf-8 区别

    简介 为使计算机支持更多语言,通常使用 0x80~0xFFFF 范围的 2 个 字节来表示 1 个字符.比如:汉字 '中' 在 ANSI编码 中文操作系统中,使用 [0xD6,0xD0] 这两个字节存 ...

  2. unicode utf8 转换 php,php实现utf-8转unicode函数分享

    代码很简单,功能却很实用,推荐给大家. 奉上代码先: public function utf8_unicode($str) { $unicode = array(); $values = array( ...

  3. 字符编码详解及由来(UNICODE,UTF-8,GBK)

    字符编码详解及由来(UNICODE,UTF-8,GBK) 各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK) - 2009-01-29 09:53     一直对 ...

  4. 字符串编码(ASCII, GBK, ANSI, Unicode(‘\u‘), UTF-8编码)

    字符串编码的发展 1.首先,计算机只能处理数字,文本转换为数字才能处理.计算机中8个bit作为一个字节,所以一个字节能表示最大的数字就是255 因为计算机是美国人发明的,所以一个字节可以表示所有字符了 ...

  5. 统计“3_人民日报语料”文本中的字符数和词数,把文件分别保存为 ansi, UTF8,UTF16,unicode 格式

    统计"3_人民日报语料"文本中的字符数和词数,把文件分别保存为 ansi, UTF8,UTF16,unicode 格式; 首先,统计文件的字符数,有两种方法.第一种是将文件复制到w ...

  6. [Python爬虫] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题

    最近研究搜索引擎.知识图谱和Python爬虫比较多,中文乱码问题再次浮现于眼前.虽然市面上讲述中文编码问题的文章数不胜数,同时以前我也讲述过PHP处理数据库服务器中文乱码问题,但是此处还是准备简单做下 ...

  7. java写ansi_java实现utf8转换ansi

    打开"记事本"程序 Notepad.exe,新建一个文本文件,内容就是一个"严"字,依次采用 ANSI, Unicode,Unicode big endian ...

  8. [Python] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题

    最近研究搜索引擎.知识图谱和Python爬虫比较多,中文乱码问题再次浮现于眼前.虽然市面上讲述中文编码问题的文章数不胜数,同时以前我也讲述过PHP处理数据库服务器中文乱码问题,但是此处还是准备简单做下 ...

  9. [Python] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题...

    最近研究搜索引擎.知识图谱和Python爬虫比较多,中文乱码问题再次浮现于眼前.虽然市面上讲述中文编码问题的文章数不胜数,同时以前我也讲述过PHP处理数据库服务器中文乱码问题,但是此处还是准备简单做下 ...

最新文章

  1. Bundle Adjustment原理及应用(附实战代码)
  2. mybatis-plus 多列映射成数组_JavaScript 为什么需要类数组
  3. Retrofit2 multpart多文件上传详解
  4. accsess转成mysql语句_轻松教你SQL转ACCESS
  5. HDU 4403 A very hard Aoshu problem DFS
  6. 19生成材料清单_SOLIDWORKS 钣金装配体材料明细表扩展应用
  7. bzoj4008: [HNOI2015]亚瑟王
  8. 从.NET未来趋势发展的两则PPT而来的乱语
  9. kuangbin 莫队专题
  10. 74LV165与74HC595 使用
  11. matlab中Current Folder的修改
  12. 一篇文章搞懂数据仓库:数据应用--OLAP
  13. CentOS 7 查询CPU、内存、磁盘的使用情况
  14. java编程成绩评分分等级_java编写成绩等级,最高分为best
  15. 计算机网络(二) 虚拟网桥
  16. 049--python--多人聊天室案例
  17. mysql表名备注_「备注」mysql添加备注信息 - seo实验室
  18. 大数据-Hadoop(环境搭建)
  19. c语言二级安卓软件,C语言二级考试题库
  20. x265-1.7版本-encoder/slicetype.cpp注释

热门文章

  1. 在 jquery repeater 中添加设置日期,下拉,复选框等控件
  2. 各大媒体优劣对比_主流酱油选购对比
  3. 基于模板的通用代码生成器LKGenerator(二)-使用时的关键步骤,注意事项及实例
  4. Android编译环境——ubuntu12.04上android2.3.4编译错误以及解决
  5. 如何修改Solaris的时区信息
  6. Flash(as3.0) CScreen
  7. go语言net包rpc远程调用的使用
  8. 【转】UINavigationController 直接返回到第一级目录
  9. 几何画板要怎样度量直线方程
  10. Delphi BLE 控件