文档章节

[C/C++]_[Unicode转Utf8,Ansi转Unicode,Ansi文件转Utf8文件]

N3verL4nd
 N3verL4nd
发布于 2017/03/25 10:39
字数 273
阅读 63
收藏 0

http://blog.csdn.net/infoworld/article/details/15337665

场景:

1.也就只有windows需要那么麻烦,还搞一个ANSI编码。学学mac os x,只需要一个utf8就行。

2.有时候需要把ansi文件内容转换为utf8编码,读取一行之后,把ansi字符串转换为utf8,之后写入文件。


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <assert.h>

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, world\n");
	//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;
}


© 著作权归作者所有

N3verL4nd
粉丝 1
博文 379
码字总数 481243
作品 0
朝阳
私信 提问
Ansi、Unicode、UTF8等编码字符串之间的转换和写入文本文件(学习中……)

Ansi、Unicode、UTF8字符串之间的转换和写入文本文件 最近有人问我关于这个的问题,就此写一篇blog Ansi 字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个/0结尾,常用于txt文本文件 ...

长平狐
2013/01/06
256
0
VC中Ansi、Unicode、UTF8字符串之间的转换和写入文本

VC中Ansi、Unicode、UTF8字符串之间的转换和写入文本 Ansi字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个0结尾,常用于txt文本文件 Unicode字符串,每个字符(汉字、英文字母)都占2...

IMGTN
2012/11/13
444
0
fstream类读取UTF-8、Unicode和ANSI文本文档乱码问题的解决方案

1、解决UTF-8类型的文本文档中文乱码读取(思路:将UTF-8转成Unicode然后再转ANSI) #include <fstream> #include <iostream> #include <string> // #include <afx.h> #include <Windows.h> ......

Yong_Luo
2011/05/28
7.2K
1
VC++的Unicode编程

一、什么是Unicode 先从ASCII说起,ASCII是用来表示英文字符的一种编码规范。每个ASCII字符占用1个字节,因此,ASCII编码可以表示的最大字符数是 255(00H—FFH)。其实,英文字符并没有那么...

长平狐
2012/09/03
147
0
VC++的Unicode编程(经典之作,交流传薪)

VC++的Unicode编程 作者:韩耀旭 原文链接:http://www.vckbase.com/document/viewdoc/?id=1733 下载源代码 一、什么是Unicode 先从ASCII说起,ASCII是用来表示英文字符的一种编码规范。每个...

长平狐
2013/01/06
440
0

没有更多内容

加载失败,请刷新页面

加载更多

oracle ORA-39700: database must be opened with UPGRADE option

ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00704: bootstrap process failure ORA-39700: database must be opened with UPGRADE option 进程 ID: 3650 会话 ID: 29......

Tank_shu
今天
1
0
分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
聊聊DubboDefaultPropertiesEnvironmentPostProcessor

序 本文主要研究一下DubboDefaultPropertiesEnvironmentPostProcessor DubboDefaultPropertiesEnvironmentPostProcessor dubbo-spring-boot-project-2.7.3/dubbo-spring-boot-compatible/au......

go4it
昨天
1
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部