c++读取utf8等不同编码文件
来源:互联网 发布:驾校预约软件 编辑:程序博客网 时间:2024/05/16 06:06
我们经常会遇到文件打开乱码的情况,特别是用C语言操作文件的时候。我用notepad++打开发现是utf8编码的,后来上网查了一下,UTF-8是变长的,一般情况下文件开头有个BOM(Byte Order Mark)作为标识,一般文本编码的BOM:
ANSI:没有BOM,直接是内容。
UNICODE(LE):FF FE
UNICODE(BE):FE FF
UTF-8:EF BB BF
【注】还有一种无BOM的UTF-8编码,这里不考虑。
ANSI采取的是英文字符一个字节,汉字字符两个字节的编码方式,而UNICODE采取使用0-0x10FFFF的数字来映射所有字符,被称为万国码,这里的UNICODE(LE),UNICODE(BE),UTF-8都是UNICODE的子集,其中UNICODE(LE),UNICODE(BE)采用固定两个字节长度的编码,UTF-8采用1到4个字节的变长字节的编码。
LE,BE分别指Little Endian,Big Endian。BIG-ENDIAN就是低位字节排放在内存的高端,高位字节排放在内存的低端。而LITTLE-ENDIAN正好相反。
【举个栗子】现在要编码数字1,我们知道1的4字节编码是0x00000001
采用BE编码,四个字节分别是0x01,0x00,0x00,0x00
采用LE编码,四个字节分别是0x00,0x00,0x00,0x01
【注】CPU读取内存从低地址到高地址
读取文本文件之前先判断BOM,然后分别用不同的方法进行读取,本文说明的是C语言操作方法。
打开这几种的字符方法基本相同,ANSI和UNICODE都可以用fopen(const char* fname,const char* mode)打开,如果有中文再进行格式的转换即可,UTF-8需要用_wfopen(L"utf8.txt", L"r,ccs=utf-8")打开,当然了,这个方法也能打开前面两种编码,只要指定编码格式(ccs=<encoding>)即可。
【注】有时读取的字符串不能正常显示,须在读取之前指定地区,setlocal(LC_ALL,"");
- c++读取utf8等不同编码文件
- CTextFileIO读取不同编码文件
- Python读取文件,检测文件编码及去除UTF8 BOM
- 疑问:Perl读取UTF8编码的文件,显示乱码。
- Java读取不同编码格式的文件
- python读取不同文件的编码问题
- MFC读取utf8文件
- ubuntu下读取 不同编码格式的文件 读取中文
- c#UTF8编码文件简体、繁体互转
- VBA写txt文件--vba写RF文件--vbs写文本文件不同编码--vba写UTF8
- 读取和写入不同编码格式的文件
- JAVA读取不同编码格式的TXT文件
- vs打开utf8编码文件
- 批量更换文件编码utf8
- UTF8/ANSI/UNICODE文件读取
- 正确读取 ANSI 编码的文本文件 UTF8
- 获取字节流编码(UTF8, unicode等)
- Unicode utf8等编码类型的原理
- C# 操作word常用方法
- At.js实现的输入框参数提示
- FreeBSD+openvpn之ports安装过程
- Java 基础加强 - JavaBean与内省操作
- Google 的十大信条
- c++读取utf8等不同编码文件
- wdlinux的安装目录
- 人生轨迹
- JavaScript加强之自定义callback
- Myeclipse中如何更改jsp默认的打开方式
- 判断平面上两条直线是否相交
- ZOJ 3525 Disappearance(扫描线)
- spring security3.x学习(8)_web的投票器和spEL配置
- 深入剖析Tomcat会话机制