1. 描述
在windows上做系统编程,少不了会遇到处理中文字符串的问题。而大多时候中文汉字都是以多字节编码的方式展现的。为了实现更好的兼容性或一些特殊的需求,(比如在网页上显示。)常需要将其转换成unicode或者utf8的格式。
2. 代码示例
2.1 中文字符串转Unicode
/************************************************************************
*int CN2Unicode(char *input,wchar_t *output)
*功能:中文字符转换为unicode字符
*参数:input,包含中文的字符串,output,Unicode字符串
*
*************************************************************************/
int CN2Unicode(char *input,wchar_t *output)
{
int len = strlen(input);
//wchar_t *out = (wchar_t *) malloc(len*sizeof(wchar_t));
len=MultiByteToWideChar(CP_ACP,0,input,-1,output,MAX_PATH);
return 1;
}
2.2 中文字符串转utf8
/************************************************************************
*int CN2Utf8(char *input,char *output)
*功能:中文字符串转换为utf8字符串
*参数:input,包含中文的字符串,output,utf8字符串
*
************************************************************************/
int CN2Utf8(char *input,char *output)
{
int len ;
wchar_t *out = (wchar_t *) malloc(len*sizeof(wchar_t));
len = MultiByteToWideChar(CP_ACP,0,input,-1,out,strlen(input)+1);
WideCharToMultiByte(CP_UTF8,0,out,wcslen(out),output,len,NULL,NULL);
return 1;
}
C/C++ Unicode转Utf8,Ansi转Unicode,Ansi文件转Utf8文件
有时候需要把ansi文件内容转换为utf8编码,读取一行之后,把ansi字符串转换为utf8,之后写入文件。
#include
#include
#include
#include
#include
char* Unicode2Utf8(const char* unicode)
{
int len;
len = WideCharToMultiByte(CP_UTF8, 0, (const wchar_t*)unicode, -1, NULL, 0, NULL, NULL);
char *szUtf8 = (char*)malloc(len + 1);
memset(szUtf8, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, (const wchar_t*)unicode, -1, szUtf8, len, NULL,NULL);
return szUtf8;
}
char* Ansi2Unicode(const char* str)
{
int dwUnicodeLen = MultiByteToWideChar(CP_ACP,0,str,-1,NULL,0);
if(!dwUnicodeLen)
{
return strdup(str);
}
size_t num = dwUnicodeLen*sizeof(wchar_t);
wchar_t *pwText = (wchar_t*)malloc(num);
memset(pwText,0,num);
MultiByteToWideChar(CP_ACP,0,str,-1,pwText,dwUnicodeLen);
return (char*)pwText;
}
char* ConvertAnsiToUtf8(const char* str)
{
char* unicode = Ansi2Unicode(str);
char* utf8 = Unicode2Utf8(unicode);
free(unicode);
return utf8;
}
int main(int argc, char *argv[])
{
printf("Hello, worldn");
//1.构造一个ansi文件,内容是"中文abc",看hex编码.
//ansi: D6 D0 CE C4 61 62 63
//utf8: E4 B8 AD E6 96 87 61 62 63
char ansi[] = {0xD6,0xD0,0xCE,0xC4,0x61,0x62,0x63,0};
char utf8[] = {0xE4,0xB8,0xAD,0xE6,0x96,0x87,0x61,0x62,0x63,0};
char* str = ConvertAnsiToUtf8(ansi);
assert(!strcmp(str,utf8));
free(str);
return 0;
}
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔