深入研究utf8编码和ascii编码
来源:互联网 发布:深圳十六号公寓知乎 编辑:程序博客网 时间:2024/05/22 03:17
1.ASCII编码
ASCII编码是最简单的编码,只能用于英文编码,一个字节就是一个字符编码,如:
在Linux下面,一个test.txt文件的内容为:
abc
123
对应的ASCII编码为:
97 98 99 10
49 50 51 10
在linux中,行尾结束符为 ASCII码的10(10进制数哦)
2.UTF8编码
UTF8编码是一个复杂的问题。
UTF-8 编码字符理论上可以最多到 6个字节长,但目前全世界的所有文字和符号种类加起来也只要编到 4个字节长就够了。UTF-8 是以 8位(即 1个字节)为单元对原始码进行编码(注意一 点:这里所讲的原始码都是指Unicode码),并规定:多字节码(2个字 节以上才称为多字节)以转换后第1个字节起头的连续“1”的数目(这 些连续“1”称为标记位),表示转换成几个字节:“110”连续两个 “1”,表示转换结果为2个字节,“1110”表示3个字节,而“11110” 则表示4个字节……跟随在标记位之后的“0”,其作用是分隔标记位和 字符码位。第2~第4个字节的起头两个位固定设置为“10”,也作为标 记,剩下的6个位才做为字符码位使用。
这样,2字节UTF-8码剩下11个字符码位,可用以转换0080~07FF的 原始字符码,3字节剩下16个字符码位,可用以转换0800~FFFF的原始字 符码,由此类推。编码方式的模板如下:
原始码(16进制) UTF-8编码(二进制)
--------------------------------------------
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
……
--------------------------------------------
汉字的 Unicode编码范围为0800-FFFF,所以被编为 3个字节的UTF-8码。例如“汉”字的Unicode编码是6C49,6C49在0800-FFFF之间,所以 要用3个字节的模板:1110wwww 10xxxxyy 10yyzzzz。
6 C 4 9
0110 1100 0100 1001
wwww xxxx yyyy zzzz
wwww xxxxyy yyzzzz
1110wwww 10xxxxyy 10yyzzzz。
11100110 10110001 10001001
E 6 B 1 8 9
“汉”字的UTF-8编码是E6 B1 89
参考博客:http://blog.csdn.net/lazyclough/article/details/7691911做实验验证以上分析:
编写test.txt,输入以下内容:
汉字测试
输入之后保存
在Linux下,编写以下代码:
#include<stdio.h>
#include<string.h>
char filename[100];
int main()
{
//input
strcpy( filename , "/home/Desktop/test.txt" );
// open the file
FILE * fp =fopen(filename,"r");
if( NULL == fp )
{
printf("Failed to open the file!\n");
return 0;
}
char tmp[100] ={'\0'};
fgets( tmp , 100 , fp ); //读取文件的第一行所有字符
//output
printf("The length :%d\n",strlen(tmp) );
printf("All chars are:\n");
int len =strlen(tmp);
for(int i=0;i<len;i++)
printf("%d ",tmp[i]);
return 0;
}
运行结果截图:
修改test.txt的内容:
汉字测试abc
然后保存以下
运行程序,结果截图:
实验成功地证明了上述的理论,取得了满意的结果!
- 深入研究utf8编码和ascii编码
- ASCII,UniCode&UTF8编码
- Ansi,UTF8,Unicode,ASCII编码
- Ansi,UTF8,Unicode,ASCII编码
- Ansi,UTF8,Unicode,ASCII编码
- Ansi,UTF8,Unicode,ASCII编码
- Ansi,UTF8,Unicode,ASCII编码
- Ansi,UTF8,Unicode,ASCII编码
- Ansi,UTF8,Unicode,ASCII编码
- 编码ascii,latin1,utf8,gbk
- Ansi,UTF8,Unicode,ASCII编码
- Ansi,UTF8,Unicode,ASCII编码
- ASCII、UTF8、Unicode编码区别
- 对UTF8编码和ASCII编码文件读写的小测试
- 字符编码ansi,utf8,unicode,ascii
- Ansi,UTF8,Unicode,ASCII编码[转]
- Ansi,UTF8,Unicode,ASCII编码的区别
- Ansi,UTF8,Unicode,ASCII编码的区别
- iconv 使用
- tomcat服务器解析(三)---- Handler for Endpoint
- OC_05_NSString类,NSMutable,NSArray类
- C#对象初始化器
- 汉诺塔问题
- 深入研究utf8编码和ascii编码
- MFC的LISTCONTROL使用
- 分布式进阶(一)Windows 7下硬盘安装Ubuntu 14.04图文教程
- schedule_work 工作队列
- haproxy给mysql做负载均衡
- tomcat服务器解析(四) ---- 组成模块分解
- 八皇后问题
- 杭电ACM 2081:手机短号
- 黑马程序员——IOS基础---C语言学习之函数