Q:什么是编码?

A:由于计算机中所有数据都是以二进制存在,那么为了存储数字,字母,各种符号和文字,计算机必须用一套映射系统来对应。比如我在某台计算机上规定,用00010001这个二进制数表示字母a,用10010010表示中文字“好”。这种规定就是编码。

Q: 什么是ASCII?

A:显然,计算机不是一个人规定好自己怎么编码就行的。计算机需要在其使用者们之间通信。因此,最好大家采用同一套通用的编码系统。ASCII就是其中出现最早的(以标准形式出现于1967年,最后一次更新是在1986年),其全称是American Standard Code for Information Interchange(美国信息交换标准代码),是一种基于拉丁字母的的7位电脑编码系统。

Q:7位的含义是?

A:从 0000 0000 到 0111 1111之间一共有128个状态,用来表示: 26个小写字母+26个大写字母+10个数字+32个符号+33个控制代码+1个空格=128。

用16位进制表示,就是占用了 0x00到0x7f 之间这么多个字符状态。 (不同语言用不同方式表示16进制数,C语言在数前加0x0X表示16进制数,如0x7f就是二进制的0111 1111)

Q:  基于拉丁字母?

A: 拉丁字母就是我们通常所说的26个大写英文字母+26个小写英文字母。

由于ACII出现得很早,当时只限于英语国家使用,故而认为128个字符已经足够使用。

Q:有没有别的称呼?

A:其国际标准名称是ISO/IEC 646。

Q:ASCII有什么缺点?

A:能够编码的字符太少,只能适用于美国现代英语(而且外来词naïve、café、élite的重音只能去掉)。虽然其后续这EASCII解决了西欧语言中类似这样的问题,但对于其他语言没有办法。

Q:ASCII的影响?

A:ACSII是一种ISO标准,这种标准使得含有ASCII字符的文本文件可以在几乎所有的操作系统中实现互换,而其它格式的文件是很难做到这一点的。因此ACSII编码是讨论其他编码的基础。

Q: 我经常在notepad中看到ANSI,这又是什么编码标准?

A:ANSI本来是指美国国家标准学会(American National Standards Institute)。当这个词指编码时,其真正更准确的名称是ANSI code pages。它实际上是上世纪80到90年代Windows操作系统上一系列编码的集合。对于不同国家,ANSI指适用于本国文字的字符编码标准。如中国的ANSI就是 GB2312(或其超集GBK),台湾的ANSI则是BIG5,日本的 ANSI 是JIS。它被称作ANSI其实一种名称的误用,因为这个集合中的编码压根就没通过ANSI和ISO的审核。不管怎样,这个词在Windows环境下还是坚持到如今……(参考:ANSI_code_page)

Q:太复杂了。有没有一种通用的办法,能够一揽子解决各种平台,各种国家,各种网络和机器环境下的编码问题呢?

A:终于轮到我们的大牛出场了。他就是大家耳熟能详的Unicode,又叫统一码,万国码。他使用ISO推出的通用字符集为基础,对世界上大部分文字进行整理并编码,力图统一所有编码。迄今已收纳超过11万个字符,并且仍在发展。Unicode现在被广为推崇(甚至微软也推荐),在现代操作系统、JAVA和.NET、XML中已经被默认实现。其最新版本是Unicode 6.3

Q:听说UTF-8UTF-16和Unicode有关系,是这样的吗?

A:是的。实际上Unicode是一整套解决方案,包括编码方式和实现方式。其实现方式就是UTF(Unicode Transformation Format)。后面的-8表示该编码采用8bit一组作为码元,而-16则表示采用16bit一组。UTF-8是万维网推荐的传输标准。

其他名词:

GB2312:兼容中国对ascii进行的字符编码扩展。全称是“信息交换用汉字编码字符集——基本集”。1980年推出。包含汉字6763个和非汉字图形字符682个。“联通”在此标准中会有错误。

GBK:与GB2312兼容,在此基础上增加到2 w多字。

BIG5:香港、台湾繁体中文区的字符集编码标准。

编码Q&A的更多相关文章

  1. Base64 算法原理,以及编码、解码【加密、解密】 介绍

    Base64编码,是我们程序开发中经常使用到的编码方法.它是一种基于用64个可打印字符来表示二进制数据的表示方法.它通常用作存储.传输一些二进制数据编码方法!也是MIME(多用途互联网邮件扩展,主要用 ...

  2. MIM协议与Base64编码

    MIME Protocol 1. MIME的全称是"Multipurpose Internet Mail Extensions",中译为"多用途互联网邮件扩展" ...

  3. Golomb及指数哥伦布编码原理介绍及实现

    2017年的第一篇博文. 本文主要有以下三部分内容: 介绍了Golomb编码,及其两个变种:Golomb-Rice和Exp-Golomb的基本原理 C++实现了一个简单的BitStream库,能够方便 ...

  4. 我的Java开发学习之旅------>Base64的编码思想以及Java实现

    Base64是一种用64个字符来表示随意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,由于二进制文件包括非常多无法显示和打印的字符.所以,假设要让记事本这种 ...

  5. 【Matlab编程】哈夫曼编码的Matlab实现

    在前年暑假的时候,用C实现了哈夫曼编译码的功能,见文章<哈夫曼树及编译码>.不过在通信仿真中,经常要使用到Matlab编程,所以为了方便起见,这里用Matlab实现的哈夫曼编码的功能.至于 ...

  6. base64encode 编码原理

    Base64编码,是我们程序开发中经常使用到的编码方法.它是一种基于用64个可打印字符来表示二进制数据的表示方法.它通常用作存储.传输一些二进制数据编码方法!也是MIME(多用途互联网邮件扩展,主要用 ...

  7. 我的Java开发学习之旅------>Base64的编码思想以及Java实现

    Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的 ...

  8. golomb哥伦布编码——本质上就是通过0来区分商和余数

    哥伦布编码是一个针对整数的变长编码方式,详细介绍可以看维基百科.这里简单介绍下: 哥伦布编码使用指定的整数 M 把输入的整数分成两部分:商数 q.余数 r. 商数当做一元编码,而余数放在后面做为可缩短 ...

  9. base64自定义编码表 php版本

    在一次接口对接中,要用到base64自定义编码表来进行编码和解码,从网上搜索了一下,讲原理的比较多也比较透彻,提供的编码的例子但是没有解码的,以下是自己实现的一个base64自定义字典解码的例子,比较 ...

随机推荐

  1. OCJP(1Z0-851) 模拟题分析(三)over

    Exam : 1Z0-851 Java Standard Edition 6 Programmer Certified Professional Exam 以下分析全都是我自己分析或者参考网上的,定有 ...

  2. [LeetCode] Remove Duplicates from Sorted List

    Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...

  3. [LeetCode] Merge Sorted Array

    Given two sorted integer arrays A and B, merge B into A as one sorted array. Note:You may assume tha ...

  4. NBU bplabel命令擦除磁帶數據

    bplabel Linux系統,該命令位於NBU server的如下目錄:/usr/openv/netbackup/bin/admincmd bplabel – write NetBackup lab ...

  5. C#中的Infinity有个小坑

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 昨天家里有事,上网也不方便,就没有推送文章.今天很累,也不长篇大论了.简单介绍一下最近遇到的 ...

  6. C# RFID windows 服务 串口方式

    话说RFID以前很火所以整理一下一年前自己处理的RFID程序,放源码. 一开始觉得他是个很神奇的东西. 包含串口通讯和网络通讯. 由于网络通讯设备太贵,所以国内的设备基本上都是在外置一个比较便宜的模块 ...

  7. Apache与Tomcat联系及区别(转)

    Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行.Apache是Web服务器而Tomcat是Java应用服务器. A ...

  8. SQL..如何用命令删除数据库中所有的表?

    要删除所有的用户表: declare @sql varchar(8000) SELECT @sql='drop table ' + name FROM sysobjects WHERE (type = ...

  9. iOS开发-由浅至深学习block

    关于block 在iOS 4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调.这不免让我们想到在C函数中,我们可以定义一个指向函数的指针并且调用 ...

  10. linux 服务初识

    1. daemon 和 service 系统为了实现某些功能,必须提供一些服务(service),但是service的提供总是需要进程的运行,实现service 的程序我们称为daemon(“守护神” ...