文档章节

utf8编码

李勇2
 李勇2
发布于 2015/03/02 09:38
字数 699
阅读 36
收藏 0

utf8编码

关于编码问题:

首先需要知道什么是编码为什么要编码, 计算机只能存储一个字节一个字节的二进制信息,所以需要把人可读的这些文字用唯一的方式在计算机内部表示出来, 但是表示的方法不唯一;

例如英文字符 就那么点 所以一个字节 也就是 8个二进制位就能给所有的进行编码,最多能给256个符号编码; 但是ASCII 编码实际只使用了 7位 所以最多编码 128个字符。

但是汉字就不行了, 常用的汉字大概6000多个, 所以 至少需要两个字节, 所以中国government给出了两个字节的编码方案, 叫做GBxxxx (国标的意思)

两个字节16位 最多 有65536 个字符, 所以 给这些汉字用是足够了,但是有个问题 如何让GB码和ASCII码互相兼容, 即这65536 个字符里面关于那些英文字符的编码 在GB码和ASCII码中要一致

方法很简单 要求所有最高位为0的编码表示的是ASCII码, 最高位为1的编码是GB码;

这样实际最多就只能表示32768个汉字了;

但是GB国标码只能在中国用, 世界人民怎么办呢?世界有那么多的语言,每种语言都应该有编码 所以有了一个叫做unicode 统一编码的东西出现了;Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符(见百度百科http://baike.baidu.com/view/40801.htm)

当然最后还有一个我们经常见到的UTF8编码, 这个是什么东西?

UTF全称 是Unicode Transformation Format 即unicode 编码的变形形式;

unicode编码是定长度的, 但是对于ASCII字符来讲 有点浪费了, 可以用一个字节表示 ASCII字符, 用多个字节表示 汉字什么的, 这就是变长度编码方式了, 那就需要对unicode编码进行一些变形;



UTF-8的定义:

0开头 latin字符
10开头 一个字符连续字节中的某一个
1111xxx 一个多字节字符的开始  前导1的个数表示字节个数 前导1后面紧跟一个0

汉字一般3个字节

unicode是统一编码
utf8是对unicode的转换编码

unicode    utf8
0xxxxxxx -> 0xxxxxxx   latin 转化成自身
00000yyy  yyxxxxxx  -> 110yyyyy  10xxxxxx  两字节 转化成 两字节
zzzzyyyy  yyxxxxxx->1110zzzz 10yyyyyy 10xxxxxx  两字节转化成三字节(一般汉字就是如此)
000wwwzz zzzzyyyy yyxxxxxx -> 11110www 10zzzzzz 10yyyyyy 10xxxxxx 三字节转化成4字节

本文转载自:http://blog.csdn.net/liyong748/article/details/7555547

共有 人打赏支持
李勇2

李勇2

粉丝 46
博文 189
码字总数 62209
作品 0
广州
程序员
MySQL字符编码解决乱码问题

这几天查找了很多关于mysql对中文字符编码的处理,读了各种零散的文章,最后做了全面的总结,现和大家分享: 字符编码 MySQL字符编码 GBK、GB2312、UTF8区别:http://kongjian.baidu.com/wang...

牧北
2011/11/26
0
0
VC2010下Qt5的中文乱码问题

要搞清楚这个问题,先要弄明白编码。但是编码问题实在太复杂,这里肯定讲不开。 我先找一个例子,比如:"中文" 的 Unicode 码点/UTF8编码/GBK 分别是多少。 先去这个网站,输入 "中文" 查询对...

沉默的大绵羊
2013/09/16
0
0
修改mysql默认字符编码为utf8

MySQL的默认编码是Latin1,不支持中文,要支持中文需要把数据库的默认编码修改为gbk或者utf8。 1、修改数据库字符编码 mysql> alter database mydb character set utf8 ; 2、创建数据库时,指...

hiwill
2015/09/08
101
0
MySQL修改编码设置及乱码问题

昨天尝试把自己用php编写的第一个糙站发布到网上..结果出现了因为编码不统一而导致乱码的想象..在"冷雨"童鞋的"控制下"终于把出现乱码的问题解决了... 总结下因为数据库文件的写入和读出出现...

天外飞鱼
2014/07/18
0
0
java写入mysql数据库乱码问题解决方法详解

确保数据库数据表创建的编码一致: 创建数据库的时候: CREATE DATABASE CHARACTER SET 'utf8 ' COLLATE 'utf8generalci'; 注:CHARACTER SET 'utf8 ':这是设置字符编码; COLLATE 'utf8gen...

小木桥
2017/02/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SharedPreferences 的使用,commit和apply两个方法的区别

SharedPreferences sp = getSharedPreferences("config",MODE_PRIVATE); //第一个参数:存储文件的名称,第二个参数文件的访问权限,通常MODE_PRIVATE是私有存储 sp.edit().putString("USERNAM...

lanyu96
6分钟前
1
0
02-《Apache Tomcat 9 User Guide》之简介

1.Introduction - 介绍 For administrators and web developers alike, there are some important bits of information you should familiarize yourself with before starting out. This d......

飞鱼说编程
10分钟前
1
0
关于maven的使用,这一篇基本就够了

2.1 关于maven 每一个工具的出现都有其历史意义,而Maven的出现则是开发者对于不同的项目都要有自己的Ant构建文件,而这些文件都各不相同,而且JAR被检入CVS(Concurrent Version System),...

小小明童鞋
12分钟前
11
0
从xtrabackup完整备份恢复单个innodb表

现在大多数同学在线上采取的备份策略都是xtrabackup全备+binlog备份,那么当某天某张表意外的删除那么如何从xtrabackup全备中恢复呢?从mysql 5.6版本开始,支持可移动表空间(Transportable...

IT--小哥
17分钟前
1
0
百度AI攻城狮,用TensorFlow API训练目标检测模型(浣熊超可爱)

今天,人工智能正影响我们生产、生活的方方面面。10月10日,为期三天的2018华为全联接大会在上海拉开帷幕,此次大会以“+智能,见未来”为主题,发布了AI战略及全球领先的全栈全场景AI解决方...

Python唱情歌
17分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部