深入研究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

然后保存以下

运行程序,结果截图:


实验成功地证明了上述的理论,取得了满意的结果!

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小学综合素质评价手册丢了怎么办 人体质不出汗差怎么办 儿子一年级语文成绩太差怎么办 小孩读一年级差几个月怎么办 小孩一年级下学期数学差怎么办 小学五年成绩差怎么办 生完孩子记忆力不好怎么办 生了孩子之后记忆力不好怎么办 孩子记忆力差学习不好怎么办 党课结业证丢了怎么办 对三年级不听话的学生应该怎么办 素质报告单丢了怎么办 社保小红本丢了怎么办 小红本丢了怎么办 孩子小红本丢了怎么办 小学素质报告册丢了怎么办 小学生素质报告册丢了怎么办 高中素质报告册丢了怎么办 小升初素质报告单丢了怎么办? 三供一业移交后社区管理职能怎么办 初中政治总考不好怎么办 孩子上初一学习越来越差怎么办 胸经过整容后变得胸闷怎么办? 网瘾高中不学习怎么办 犯罪人逃到美国怎么办 10岁儿童偏胖怎么办 土地面积与实际面积不符怎么办 军转进省直单位双选失败怎么办 房改房楼龄到了70年怎么办 商品房房改房到70年后怎么办 公务员未享受房改政策怎么办 两套房改房违规怎么办 法院保全的物品在我家怎么办 西瓜视频答题结束了钱没提现怎么办 诚信答题密码忘了怎么办 我未成年杀了人怎么办 错过了网课考试怎么办? 2018广东省普法考试0分怎么办 小孩错过了小升初的考试怎么办 错过了自主招生考试怎么办? 科目一考试错过了时间怎么办