UTF8国际通用为什么还要用GBK?
前序:
一直对编码很痴迷,让数据一目了然不好吗?为什么要去编码,这不是闲的没事,浪费生产力吗?
随着学习的深入,愈加觉得自己无知,世界语言千万种,在互联网的世界里如何表示他们?碰到汉字ASCii就显得苍白无力了,所以,需要更多的字节来表示各种文字,这就需要一个规范;
同时,起初编解码的目的是为了数据的安全,这种技术逐渐应用在各个方面,比如邮件中的base64等等,本文主要讨论有了utf8这个国际编码,为什么国内很多网站执着于gbk?
正文:
UTF8是国际编码,它的通用性比较好,外国人也可以浏览国内网站;
GBK是国内编码,其中gb2312针对简体汉字,通用性比UTF8差,但有其使用空间;
网上看到这样一条提示:如果您的网站客户群体主要是面向国内用户的,建议使用GBK版本,因为它可以节省空间,及相对utf-8版本来讲稳定一些。
其实GBK版本与UTF-8版本功能是一样的.只不过编码方式不同。
GBK的文字编码是双字节来表示的,即不论中、英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。
至于UTF-8编码,它是变长的,用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的网站则用UTF-8节省空间。
GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符。
GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准,UTF-8编码的文字可以在各国各种支持UTF8字符集的浏览器上显示。
比如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,而无需他们下载IE的中文语言支持包。 所以,对于英文比较多的网站 ,使用GBK则每个字符占用2个字节,而使用UTF-8英文却只占一个字节。
简单的说 UTF-8包含了很多世界范围内的语言编码(相当于一个大字库) 比如日文 韩文 都可以用。GBK和GB2312只是中文的,相当于包含的汉字个数的多少。为了方便还是用UTF-8比较好。
简单说一下原理
字符串都是unicode码,包括英文,汉字...其他字符
unicode可以被转化为字节(byte),如何转换呢,就通过gbk、utf-8、gb2312等编码方式。当把字节转换回字符串的时候,也要用相应的编码方式进行转换。
比如客户端把unicode码通过utf-8转换为二进制流(也就是字节byte),而到了服务器端用gbk编码来把这个二进制流转换为字符串(unicode)的时候,就会出现乱码。必须也要用相应的编码方式进行转换。
gbk(encode) gbk(decode)
unicode---------------->byte[]------------------------------>unicode
String 二进制流 String
通用转换格式UTF(Universal Transformation Format)
UTF-8是UNICODE的一种变长字符编码
GBK: 汉字国标扩展码,基本上采用了原来GB2312-80所有的汉字及码位,
并涵盖了原Unicode中所有的汉字20902
GBK编码是中国大陆制订的、等同于UCS的新的中文编码扩展国家标准
GB 2312或GB 2312-80是一个简体中文字符集的中国国家标准
GB 2312标准共收录6763个汉字
区别很简单,不同的字符集。
什么叫字符集,其实就是一张对照表。"啊"字对应UNICODE编码就是"554A",对应的GBK编码是"B0A1".
什么是对照表呢,简单举个例子,就是班级的点名册,"张三"对应10号。计算机不能存储"张三",就存储个"10",取出一个10,按对照表一查,返回一个"张三"。
但是在全学校的点名册里,"张三"对应15号。不同的点名册就是不同的字符集。
现
在你把"10"存进去了,取出来后,按照班级点名册取出了"张三",很正确,如果用了全学校的点名册,返回给你个外国人,假设你不认识英文,你就觉得乱码
了,其实没乱,你可以把它返回成10,再用班级点名册去对照,"张三"不就出来了。注意:如果全学校的点名册里没有10对应的人,按照约定就返回给
你"????",这个时候才真的乱码了,返回不了了。
不同的点名册,就是不同的字符集。GB2312是一个点名册,后来班里又插班进来俩学生,GB2312加俩学生,老师说,点名册不一样了,换个名吧,叫GBK好了。
中国有个学生叫"张三",在中国是"10"号,后来出国了,联合国给他个号"20"号,一个GBK,一个UTF8,但都是一个人,对应不同的号而已。
ps:UTF-8是UNICODE的变种,从UNICODE编码可以计算出一个字对应的UTF-8编码。
UTF8国际通用为什么还要用GBK?的更多相关文章
- Python:将utf-8格式的文件转换成gbk格式的文件
需求:将utf-8格式的文件转换成gbk格式的文件 实现代码如下: def ReadFile(filePath,encoding="utf-8"): with codecs.ope ...
- 基于emoji 国际通用表情在web上的输入与显示的记录
定义: emoji 即国际通用表情 场景: 1,ios,android,wp上emoji表情输入与显示 2,web也需作为支撑平台对emoji表情就行输入与显示(解析) 问题: 1,app端输入的表情 ...
- 在UTF-8页面中引入编码为GBK的JavaScript文件乱码问题了
原文地址:http://js8.in/2009/12/11/%E5%AF%B9%E5%BC%95%E7%94%A8%E5%A4%96%E9%83%A8javascript%E9%A1%B5%E9%9D ...
- 细说 unicode 、utf-8 、utf-16、ascii 、gbk 、gb2312
一.计算机的由来 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为”字节“.再后来,他们又做了一些可以处理这些 ...
- 将某个MySQL库中的UTF8字符列都转成GBK格式
DELIMITER $$ DROP PROCEDURE IF EXISTS `dba`.`Proc_ChangeCharacter2GBK`$$ CREATE DEFINER=`root`@`%` P ...
- 嵌入式开发之字符叠加---gb2313 国标码,utf8 国际码,unicode 无码
(1)国标码简介 (2)编码转换 (3)时间获取 (4)显示切换 最近做了个字符叠加,包括时间叠加,字符中文叠加,位置移动,等功能开启.因为一般的字符叠加的点阵式16位,然后填充着16位的编码是gb2 ...
- html基础知识1(基本标签)2017-03-07
摘要:php基础知识1 内容:大学中虽有接触,却是以学生的心态去应付考试的,学的都是理论知识:从今天开始我同样还是要以学生的心态去学习,但却要以要从事工作的心态去练习. 以下为第一天所学内容,因电脑原 ...
- HTML入门知识
B/S:浏览器-服务器 C/S:客户端-服务器 更新麻烦 管理麻烦 PHP:基于BS结构进行项目开发的语言 ====================HTML:超文本标记语言 -- 控制网面内容CSS: ...
- HTML入门知识汇总
1. HTML认识 1.1 什么是HTML HTML是描述(制作)网页的语言,指的是超文本标记语言(Hyper Text Markup Language). 超文本:就是指页面内可以包含图片.链接.甚 ...
随机推荐
- 对Unity3d C#手动处理异常产生
System.AppDomain.CurrentDomain.UnhandledException += new System.UnhandledExceptionEventHandler(_OnUn ...
- Cocos2d-X采用CCScrollView创建滚动视图
CCScrollView滚动视图可以让游戏有效果,并能够通过滚动视图切换游戏场景,滚动视图通常用来选择在游戏中的级别 实例1:使用CCScrollView创建一个简单的滚动视图 首先创建一个Scrol ...
- 霍夫曼(最优二叉树)和Java达到
一.定义 一些定义: 节点之间的路径长度:在从节点树中的一个节点也经历分公司,这构成的两个节点之间的路径分支的数目后这就是所谓的路径长度 的路径长度:从树的根节点到树中每一结点的路径长度之和. 在结点 ...
- linux_awk_内部正则过滤
awk -F'\t' '{if($3 !~ /^<p><img/){print $0}}' latex500.db|wc -l
- OWIN– 解耦,协作和开放
OWIN的理解和实践(一) – 解耦,协作和开放 概述 OWIN的全称是Open Web Interface For .Net, 是MS在VS2013期间引入的全新的概念, 网上已经有不少的关于它的信 ...
- Net社区虚拟大会
微软“.Net社区虚拟大会”dotnetConf2015:关键词:.NET 创新.开源.跨平台 去年 11 月的时候,微软开源了 .NET CoreFX,然后是今年 2 月份的 .NET CoreCL ...
- asp.net 发邮件
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- Web API-属性路由
路由(Routing)就是Web API如何将一个URI匹配到一个action的过程.Web API 2 支持一个新的路由方式-属性路由(attribute routing).顾名思义,属性路由使用标 ...
- JSR303 Bean Validation 技术规范特性概述
概述 Bean Validation 规范 Bean 是 Java Bean 的缩写,在 Java 分层架构的实际应用中,从表示层到持久化层,每一层都需要对 Java Bean 进行业务符合性验证,如 ...
- jmeter之自定义java请求性能测试
一.环境准备 1.新建一个java工程 2.导入jar包:ApacheJMeter_core.jar ApacheJMeter_java.jar ...