字符串处理 - ANSI - Unicode - UTF8 转换
- #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;
- }
字符串处理 - ANSI - Unicode - UTF8 转换的更多相关文章
- 各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK)
一直对字符的各种编码方式懵懵懂懂,什么ANSI UNICODE UTF-8 GB2312 GBK DBCS UCS……是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们.Let's go! ...
- 编码占用的字节数 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 ...
- python 保存文本txt格式之总结篇,ANSI,unicode,UTF-8
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4wAAAEmCAIAAACmsIlUAAAgAElEQVR4nOydezxU+f/HP49WSstKkZ
- Unicode UTF-8 转换
Unicode是类似“U+4E25”或“\u4E25”的编码方式,很多情况下是4个十六进制的数,有时候不止. Unicode编码系统可分为编码方式和实现方式两个层次: 编码方式:“严”的Unicode ...
- [Python] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题
最近研究搜索引擎.知识图谱和Python爬虫比较多,中文乱码问题再次浮现于眼前.虽然市面上讲述中文编码问题的文章数不胜数,同时以前我也讲述过PHP处理数据库服务器中文乱码问题,但是此处还是准备简单做下 ...
- 趣谈unicode,ansi,utf-8,unicode big endian这些编码有什么区别(转载)
从头讲讲编码的故事.那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起.嗯,也许这样开始比较好…… 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同 ...
- 【转】【编码】ANSI,ASCII,Unicode,UTF8之一
不同的国家和地区制定了不同的标准,由此产生了 GB2312.GBK.GB18030.Big5.Shift_JIS 等各自的编码标准.这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称 ...
- [转]unicode,ansi,utf-8,unicode big endian的故事
unicode,ansi,utf-8,unicode big endian的故事很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的 ...
- 趣谈unicode,ansi,utf-8,unicode big endian这些编码有什么区别
从头讲讲编码的故事.那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起.嗯,也许这样开始比较好…… 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同 ...
随机推荐
- 侯捷C++学习(一)
//c++学习//标准库非常重要//要规范自己的代码complex c1(2,1);complex c2;complex* pc = new complex(0,1);string s1(" ...
- 003.Oracle数据库 , 查询日期格式格式化
/*日期格式转换*/ SELECT TO_CHAR( OCCUR_DATE, 'yyyy/mm/dd hh24:mi:ss' ) FROM LM_FAULT WHERE ( ( OCCUR_DATE ...
- eshop7-mysql
1. Mysql 安装 执行 yum -y install mysql-server 注意:(1)是否使用sudo 权限执行请根据您具体环境来决定 (2)检查是否已经安装mysql-server rp ...
- gitlab访问慢,出现502,特别卡,耗内存cpu解决办法
前言 浏览器访问gitlab的web页面,发现非常慢,并且很容易出现502问题.其中一个原因就是8080端口被tomcat占用,前面一篇已经更换了端口,但还是很慢.后来搜了下,原因是gitlab占用内 ...
- python矩阵运算大全(linalg模块)
python矩阵的运算大全 python矩阵运算可以用numpy模块,也可以用scipy模块,主要运算包括以下几种: #1-1python矩阵运算所需模块 import numpy as npimpo ...
- 关于div水平垂直居中的几种方法
Dom结构: <div class="box"> <div class="inner"> 123 </div> </d ...
- Vue.js(24)之 弹窗组件封装
同事封装了一个弹窗组件,觉得还不错,直接拿来用了: gif图展示: 弹框组件代码: <template> <transition name="confirm-fade&qu ...
- springboot+thymeleaf项目中使用th:replace访问templates子目录下的模板,会报错找不到模板路径
解决方法: 先将模板路径放置templates目录下,发现可以访问,说明th:replace是可以用的. 那可能是出现在路径问题上面. 于是我开始调错,改路径. 后来在网上查找资料.说了很多种方法. ...
- ls 查看文件
1.按文件大小查看文件 a.降序:ls -lsh moudaen@morton:~$ ls -lshtotal 20M 20M -rw-r--r-- 1 moudaen 65536 20M Nov ...
- 2016蓝桥杯决赛C/C++A组第四题 路径之谜
题意: 小明冒充X星球的骑士,进入了一个奇怪的城堡.城堡里边什么都没有,只有方形石头铺成的地面. 假设城堡地面是 n x n 个方格.[如图1.png]所示. 按习俗,骑士要从西北角走到东南角.可以横 ...