博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串处理 - ANSI - Unicode - UTF8 转换
阅读量:6551 次
发布时间:2019-06-24

本文共 3426 字,大约阅读时间需要 11 分钟。

  hot3.png

#include 
#include
#include
#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; }

 

转载于:https://my.oschina.net/871120/blog/346745

你可能感兴趣的文章
SaltStack 中ZMQ升级
查看>>
exchange 2013 提示“HTTP 500内部服务器错误”
查看>>
Linux运维学习笔记之一:运维的原则和学习方法
查看>>
怎样使用原型设计中的组件样式功能
查看>>
python threading
查看>>
谷安天下2013年6月CISA考前辅导 第一季
查看>>
在普通台式机上搭建服务器虚拟化架构Esxi平台
查看>>
电话线路 30B+D 名词解释
查看>>
吉炬消费系统软件输入密码后无法打开软件界面故障处理
查看>>
Hibernate学习系列————注解一对多双向实例
查看>>
Cannot load from mysql.proc
查看>>
汇编字符串拷贝
查看>>
TCP/IP模型简介和/etc/hosts文件说明
查看>>
UIButton常用属性
查看>>
主键自增归0
查看>>
mysql之 [ERROR] InnoDB: Unable to lock ./ibdata1, error: 11
查看>>
如何批量修改文件后缀的方法
查看>>
Effective STL 笔记
查看>>
[LeetCode] 1. Two Sum
查看>>
POJ2538 ZOJ1884 UVA10082 WERTYU【输入输出】
查看>>