概念浅析:字符集、字符编码、字节序、ASCII、GBK、Unicode、UTF-8、ANSI

原创 2018年04月17日 21:12:19

概念浅析(一):字符集、字符编码、字节序

字符集 character set:顾名思义,指的是字符集合,它表示在如 简体汉字、繁体汉字、英文、阿拉伯数字、韩文、日文等众多字符中,所能涵盖和表示的字符范围,值得注意的是,虽然通常某个字符集都会有默认的字符编码方式,但严格来说字符集仅仅表示字符集合,并不表示字符的编码方式encoding和存储字节序;

字符编码 encoding,指的是字符的编码规则,包括编码长度是单字节,双字节还是四字节,编码与字符集中字符的对应关系等;

字节序 BYTE-ORDER:big-endian,little-endian,指的是多字节数据的存储顺序,如果字符编码采用多字节方案,则自然涉及到编码数据在内存中的存储顺序,endian指的是多字节数据的尾部字节,也即是低位字节,big/little指的是存储地址,所以big-endian是指多字节数据的低位字节 存储在大地址(高位地址),little-endian指的是低位地址存储低位字节;

DEC (Digital Equipment Corporation,现在是Compaq公司的一部分)和Intel的机器(X86平台)一般采用小端。

IBM, Motorola(Power PC), Sun的机器一般采用大端。当然,这不代表所有情况。有的CPU即能工作于小端, 又能工作于大端, 比如ARM, Alpha,摩托罗拉的PowerPC。 具体情形参考处理器手册。 具体这类CPU是大端还是小端,应该和具体设置有关。(如,Power PC支持little-endian字节序,但在默认配置时是big-endian字节序)。

一般来说,大部分用户的操作系统(如windows, FreeBsd,Linux)是Little Endian的。少部分,如MAC OS ,是Big Endian 的。

所以说,Little Endian还是Big Endian与操作系统和芯片类型都有关系。Linux系统中,你可以在/usr/include/中(包括子目录)查找字符串BYTE_ORDER(或_BYTE_ORDER, __BYTE_ORDER),确定其值。BYTE_ORDER中文称为字节序。这个值一般在endian.h或machine/endian.h文件中可以找到,有时在feature.h中,不同的操作系统可能有所不同。C/C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的,而 J***A编写的程序则唯一采用big endian方式来存储数据。无独有偶,所有网络协议也都是采用big endian的方式来传输数据的。所以有时我们也会把big endian方式称之为网络字节序。当两台采用不同字节序的主机通信时,在发送数据之前都必须经过字节序的转换成为网络字节序后再进行传输。ANSI C中提供了下面四个转换字节序的宏。

所以,字符集规定了包含的字符范围,字符编码规定了字符怎么编码表示,字节序规定了字符编码则怎么存储和传输。

深入理解-字符编码ASCII,GB2312,GBK,Unicode,UTF-8

字符编码字符编码 简介 几个值的深思的问题 字符编码种类 ASCII GB2321 GBK Unicode UTF-8 一图解忧愁 解决问题 分析 解决方案 题外话-关于parseIntstring ...
  • softwarenb
  • softwarenb
  • 2016-08-06 20:30:32
  • 6989

字符编码:ANSI和ASCII区别、Unicode和UTF-8区别

ANSI和ASCII区别 ANSI码(American National Standards Institute) 美国国家标准学会的标准码 ASCII码(America Standard Cod...
  • dongchongyang
  • dongchongyang
  • 2016-09-09 10:32:31
  • 2249

【编码】ASCII、Unicode、GBK和UTF-8字符编码的区别联系

ASCII、Unicode、GBK和UTF-8字符编码的区别联系2015-05-08 实验楼很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开...
  • u010262331
  • u010262331
  • 2015-05-26 21:40:10
  • 5939

JAVA 编码之 ASCII、Unicode、GBK和UTF-8字符编码的区别联系

编码的发展     开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。 他们把其中的编号从0开始的32种状态分别规定了特殊的用途,一但终端、打印机遇上约定好的这些字...
  • u011278496
  • u011278496
  • 2014-09-26 22:26:53
  • 3231

常用字符集编码详解:ASCII 、GB2312、GBK、GB18030、UTF-8、unicode

ASCII ASCII码是7位编码,编码范围是0x00-0x7F。ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7F共33个控制字符。 只支持AS...
  • zhoubl668
  • zhoubl668
  • 2011-10-28 13:06:05
  • 8706

iconv字符编码转换全攻略

iconv(http://www.gnu.org/software/libiconv/)是一个开源的字符编码转换库,可以“方便”的完成几乎所有的编码转换工作。说简单是因为,它常用的接口就三个,icon...
  • veryhehe2011
  • veryhehe2011
  • 2014-04-09 15:30:41
  • 15625

ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030各种常用编码区别

最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总结网上一些朋友提供的 ascii,ISO-8859-1,unicode, utf8,gb2312,big5,gbk,gb18030等几种常区...
  • cbk861110
  • cbk861110
  • 2012-08-15 11:08:21
  • 2208

JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础

 这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考。为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问...
  • qinysong
  • qinysong
  • 2006-09-05 12:16:00
  • 42139

简述 ascii、unicode、utf-8、gbk 的关系

简述 ascii、unicode、utf-8、gbk 的关系 ascii 是最早美国用的标准信息交换码,把所有的字母的大小写,各种符号用 二进制来表示,共有256中,加入些拉丁文等字符,1byt...
  • m0_37777640
  • m0_37777640
  • 2017-09-06 06:43:11
  • 478

从字符编码的发展历史理解ANSI、GB2312、Unicode、UTF8和UTF16区别

在编程学习的深入后,不可避免的会遇到ANSI、GB2312、UTF8的编码问题,如果不彻底了解他们的区别,都最终会造成一个问题--乱码!例如文件打开乱码,数据库乱码、网页乱码等等各种乱码,这里就通过字...
  • zrf2112
  • zrf2112
  • 2016-02-22 19:19:27
  • 1864
收藏助手
不良信息举报
您举报文章:概念浅析:字符集、字符编码、字节序、ASCII、GBK、Unicode、UTF-8、ANSI
举报原因:
原因补充:

(最多只允许输入30个字)