字符串处理 - ANSI - Unicode - UTF8 转换
2008-11-5: 使用C语言标准库mbstowcs和wcstombs写的w2m和m2w两个函数,分别对应ANSI <-> Unicode 相互转换。
2008-11-8: 包装一下 ANSI <-> UTF-8 。
#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 区别
简介 为使计算机支持更多语言,通常使用 0x80~0xFFFF 范围的 2 个 字节来表示 1 个字符.比如:汉字 '中' 在 ANSI编码 中文操作系统中,使用 [0xD6,0xD0] 这两个字节存 ...
- unicode utf8 转换 php,php实现utf-8转unicode函数分享
代码很简单,功能却很实用,推荐给大家. 奉上代码先: public function utf8_unicode($str) { $unicode = array(); $values = array( ...
- 字符编码详解及由来(UNICODE,UTF-8,GBK)
字符编码详解及由来(UNICODE,UTF-8,GBK) 各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK) - 2009-01-29 09:53 一直对 ...
- 字符串编码(ASCII, GBK, ANSI, Unicode(‘\u‘), UTF-8编码)
字符串编码的发展 1.首先,计算机只能处理数字,文本转换为数字才能处理.计算机中8个bit作为一个字节,所以一个字节能表示最大的数字就是255 因为计算机是美国人发明的,所以一个字节可以表示所有字符了 ...
- 统计“3_人民日报语料”文本中的字符数和词数,把文件分别保存为 ansi, UTF8,UTF16,unicode 格式
统计"3_人民日报语料"文本中的字符数和词数,把文件分别保存为 ansi, UTF8,UTF16,unicode 格式; 首先,统计文件的字符数,有两种方法.第一种是将文件复制到w ...
- [Python爬虫] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题
最近研究搜索引擎.知识图谱和Python爬虫比较多,中文乱码问题再次浮现于眼前.虽然市面上讲述中文编码问题的文章数不胜数,同时以前我也讲述过PHP处理数据库服务器中文乱码问题,但是此处还是准备简单做下 ...
- java写ansi_java实现utf8转换ansi
打开"记事本"程序 Notepad.exe,新建一个文本文件,内容就是一个"严"字,依次采用 ANSI, Unicode,Unicode big endian ...
- [Python] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题
最近研究搜索引擎.知识图谱和Python爬虫比较多,中文乱码问题再次浮现于眼前.虽然市面上讲述中文编码问题的文章数不胜数,同时以前我也讲述过PHP处理数据库服务器中文乱码问题,但是此处还是准备简单做下 ...
- [Python] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题...
最近研究搜索引擎.知识图谱和Python爬虫比较多,中文乱码问题再次浮现于眼前.虽然市面上讲述中文编码问题的文章数不胜数,同时以前我也讲述过PHP处理数据库服务器中文乱码问题,但是此处还是准备简单做下 ...
最新文章
- Bundle Adjustment原理及应用(附实战代码)
- mybatis-plus 多列映射成数组_JavaScript 为什么需要类数组
- Retrofit2 multpart多文件上传详解
- accsess转成mysql语句_轻松教你SQL转ACCESS
- HDU 4403 A very hard Aoshu problem DFS
- 19生成材料清单_SOLIDWORKS 钣金装配体材料明细表扩展应用
- bzoj4008: [HNOI2015]亚瑟王
- 从.NET未来趋势发展的两则PPT而来的乱语
- kuangbin 莫队专题
- 74LV165与74HC595 使用
- matlab中Current Folder的修改
- 一篇文章搞懂数据仓库:数据应用--OLAP
- CentOS 7 查询CPU、内存、磁盘的使用情况
- java编程成绩评分分等级_java编写成绩等级,最高分为best
- 计算机网络(二) 虚拟网桥
- 049--python--多人聊天室案例
- mysql表名备注_「备注」mysql添加备注信息 - seo实验室
- 大数据-Hadoop(环境搭建)
- c语言二级安卓软件,C语言二级考试题库
- x265-1.7版本-encoder/slicetype.cpp注释
热门文章
- 在 jquery repeater 中添加设置日期,下拉,复选框等控件
- 各大媒体优劣对比_主流酱油选购对比
- 基于模板的通用代码生成器LKGenerator(二)-使用时的关键步骤,注意事项及实例
- Android编译环境——ubuntu12.04上android2.3.4编译错误以及解决
- 如何修改Solaris的时区信息
- Flash(as3.0) CScreen
- go语言net包rpc远程调用的使用
- 【转】UINavigationController 直接返回到第一级目录
- 几何画板要怎样度量直线方程
- Delphi BLE 控件