1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <locale.h>
  4. #define BUFF_SIZE 1024
  5.  
  6. wchar_t * ANSIToUnicode( const char* str )
  7. {
  8. int textlen ;
  9. wchar_t * result;
  10. textlen = MultiByteToWideChar( CP_ACP, 0, str,-1, NULL,0 );
  11. result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t));
  12. memset(result,0,(textlen+1)*sizeof(wchar_t));
  13. MultiByteToWideChar(CP_ACP, 0,str,-1,(LPWSTR)result,textlen );
  14. return result;
  15. }
  16.  
  17. char * UnicodeToANSI( const wchar_t* str )
  18. {
  19. char* result;
  20. int textlen;
  21. textlen = WideCharToMultiByte( CP_ACP, 0, str, -1, NULL, 0, NULL, NULL );
  22. result =(char *)malloc((textlen+1)*sizeof(char));
  23. memset( result, 0, sizeof(char) * ( textlen + 1 ) );
  24. WideCharToMultiByte( CP_ACP, 0, str, -1, result, textlen, NULL, NULL );
  25. return result;
  26. }
  27.  
  28. wchar_t * UTF8ToUnicode( const char* str )
  29. {
  30. int textlen ;
  31. wchar_t * result;
  32. textlen = MultiByteToWideChar( CP_UTF8, 0, str,-1, NULL,0 );
  33. result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t));
  34. memset(result,0,(textlen+1)*sizeof(wchar_t));
  35. MultiByteToWideChar(CP_UTF8, 0,str,-1,(LPWSTR)result,textlen );
  36. return result;
  37. }
  38.  
  39. char * UnicodeToUTF8( const wchar_t* str )
  40. {
  41. char* result;
  42. int textlen;
  43. textlen = WideCharToMultiByte( CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL );
  44. result =(char *)malloc((textlen+1)*sizeof(char));
  45. memset(result, 0, sizeof(char) * ( textlen + 1 ) );
  46. WideCharToMultiByte( CP_UTF8, 0, str, -1, result, textlen, NULL, NULL );
  47. return result;
  48. }
  49. /*宽字符转换为多字符Unicode - ANSI*/
  50. char* w2m(const wchar_t* wcs)
  51. {
  52. int len;
  53. char* buf;
  54. len =wcstombs(NULL,wcs,0);
  55. if (len == 0)
  56. return NULL;
  57. buf = (char *)malloc(sizeof(char)*(len+1));
  58. memset(buf, 0, sizeof(char) *(len+1));
  59. len =wcstombs(buf,wcs,len+1);
  60. return buf;
  61. }
  62. /*多字符转换为宽字符ANSI - Unicode*/
  63. wchar_t* m2w(const char* mbs)
  64. {
  65. int len;
  66. wchar_t* buf;
  67. len =mbstowcs(NULL,mbs,0);
  68. if (len == 0)
  69. return NULL;
  70. buf = (wchar_t *)malloc(sizeof(wchar_t)*(len+1));
  71. memset(buf, 0, sizeof(wchar_t) *(len+1));
  72. len =mbstowcs(buf,mbs,len+1);
  73. return buf;
  74. }
  75.  
  76. char* ANSIToUTF8(const char* str)
  77. {
  78. return UnicodeToUTF8(ANSIToUnicode(str));
  79. }
  80.  
  81. char* UTF8ToANSI(const char* str)
  82. {
  83. return UnicodeToANSI(UTF8ToUnicode(str));
  84. }
  85.  
  86. int main()
  87. {
  88. /*使用wcstombs和mbstowcs之前必须调用setlocale,以便决定内码*/
  89. setlocale(LC_ALL,".936");
  90. /*假定有一个Unicode(UTF-16LE)编码的文件,将其打开,重新编码为ANSI
  91. ,写入aa.txt中,再继续编码回Unicode,写入aw.txt中*/
  92. /*如果不存在a.txt文件,则程序出错,没有做错误处理*/
  93. char* filename = "a.txt";
  94. char* filenamea = "aa.txt";
  95. char* filenamew = "aw.txt";
  96. FILE* input=fopen( filename, "rb");
  97. FILE* inputa=fopen( filenamea, "wb");
  98. FILE* inputw=fopen( filenamew, "wb");
  99. wchar_t * buf ;
  100. /*BOE设置,UTF-16LE的BOE为FEFF,如果不先将其读取出来,wcstombs会调用失败*/
  101. fgetwc(input);
  102. fputwc(0xFEFF,inputw);
  103. /*开始读取文件*/
  104. while(!feof(input))
  105. {
  106. buf = (wchar_t *)malloc(sizeof(wchar_t)*BUFF_SIZE) ;
  107. memset(buf, 0, sizeof(wchar_t) * BUFF_SIZE );
  108. fgetws(buf, BUFF_SIZE, input);
  109. fputs(w2m(buf), inputa);
  110. fputws(m2w(w2m(buf)), inputw);
  111. }
  112. /*后续处理*/
  113. fclose(input);
  114. fclose(inputa);
  115. fclose(inputw);
  116. free(buf);
  117.  
  118. return 0;
  119. }

字符串处理 - ANSI - Unicode - UTF8 转换的更多相关文章

  1. 各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK)

    一直对字符的各种编码方式懵懵懂懂,什么ANSI UNICODE UTF-8 GB2312 GBK DBCS UCS……是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们.Let's go! ...

  2. 编码占用的字节数 1 byte 8 bit 1 sh 1 bit 中文字符编码 2. 字符与编码在程序中的实现 变长编码 Unicode UTF-8 转换 在网络上传输 保存到磁盘上 bytes

    小结: 1.UNICODE 字符集编码的标准有很多种,比如:UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等: 2 服务器->网页 utf-8 ...

  3. python 保存文本txt格式之总结篇,ANSI,unicode,UTF-8

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4wAAAEmCAIAAACmsIlUAAAgAElEQVR4nOydezxU+f/HP49WSstKkZ

  4. Unicode UTF-8 转换

    Unicode是类似“U+4E25”或“\u4E25”的编码方式,很多情况下是4个十六进制的数,有时候不止. Unicode编码系统可分为编码方式和实现方式两个层次: 编码方式:“严”的Unicode ...

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

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

  6. 趣谈unicode,ansi,utf-8,unicode big endian这些编码有什么区别(转载)

    从头讲讲编码的故事.那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起.嗯,也许这样开始比较好…… 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同 ...

  7. 【转】【编码】ANSI,ASCII,Unicode,UTF8之一

          不同的国家和地区制定了不同的标准,由此产生了 GB2312.GBK.GB18030.Big5.Shift_JIS 等各自的编码标准.这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称 ...

  8. [转]unicode,ansi,utf-8,unicode big endian的故事

    unicode,ansi,utf-8,unicode big endian的故事很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的 ...

  9. 趣谈unicode,ansi,utf-8,unicode big endian这些编码有什么区别

    从头讲讲编码的故事.那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起.嗯,也许这样开始比较好…… 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同 ...

随机推荐

  1. 侯捷C++学习(一)

    //c++学习//标准库非常重要//要规范自己的代码complex c1(2,1);complex c2;complex* pc = new complex(0,1);string s1(" ...

  2. 003.Oracle数据库 , 查询日期格式格式化

    /*日期格式转换*/ SELECT TO_CHAR( OCCUR_DATE, 'yyyy/mm/dd hh24:mi:ss' ) FROM LM_FAULT WHERE ( ( OCCUR_DATE ...

  3. eshop7-mysql

    1. Mysql 安装 执行 yum -y install mysql-server 注意:(1)是否使用sudo 权限执行请根据您具体环境来决定 (2)检查是否已经安装mysql-server rp ...

  4. gitlab访问慢,出现502,特别卡,耗内存cpu解决办法

    前言 浏览器访问gitlab的web页面,发现非常慢,并且很容易出现502问题.其中一个原因就是8080端口被tomcat占用,前面一篇已经更换了端口,但还是很慢.后来搜了下,原因是gitlab占用内 ...

  5. python矩阵运算大全(linalg模块)

    python矩阵的运算大全 python矩阵运算可以用numpy模块,也可以用scipy模块,主要运算包括以下几种: #1-1python矩阵运算所需模块 import numpy as npimpo ...

  6. 关于div水平垂直居中的几种方法

    Dom结构: <div class="box"> <div class="inner"> 123 </div> </d ...

  7. Vue.js(24)之 弹窗组件封装

    同事封装了一个弹窗组件,觉得还不错,直接拿来用了: gif图展示: 弹框组件代码: <template> <transition name="confirm-fade&qu ...

  8. springboot+thymeleaf项目中使用th:replace访问templates子目录下的模板,会报错找不到模板路径

    解决方法: 先将模板路径放置templates目录下,发现可以访问,说明th:replace是可以用的. 那可能是出现在路径问题上面. 于是我开始调错,改路径. 后来在网上查找资料.说了很多种方法. ...

  9. ls 查看文件

    1.按文件大小查看文件 a.降序:ls -lsh moudaen@morton:~$ ls -lshtotal 20M 20M -rw-r--r-- 1 moudaen 65536  20M Nov ...

  10. 2016蓝桥杯决赛C/C++A组第四题 路径之谜

    题意: 小明冒充X星球的骑士,进入了一个奇怪的城堡.城堡里边什么都没有,只有方形石头铺成的地面. 假设城堡地面是 n x n 个方格.[如图1.png]所示. 按习俗,骑士要从西北角走到东南角.可以横 ...