2019独角兽企业重金招聘Python工程师标准>>>

第3章 字符的存储

第1节 ASCII

ASCII(,American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本EASCII则可以部分支持其他西欧语言,并等同于国际标准ISO/IEC 646。由于万维网使得ASCII广为通用,直到2007年12月,逐渐被Unicode取代。

美国标准信息交换代码是由美国国家标准学会(American National Standard Institute , ANSI )制定的,标准的单字节字符编码方案,用于基于文本的数据。起始于50年代后期,在1967年定案。它最初是美国国家标准,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,它已被国际标准化组织(International Organization for Standardization, ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母。

ASCII第一次以规范标准的型态发表是在1967年,最后一次更新则是在1986年,至今为止共定义了128个字元;其中33个字元无法显示(一些终端提供了扩展,使得这些字符可显示为诸如笑脸、扑克牌花式等8-bit符号),且这33个字元多数都已是陈废的控制字元。控制字元的用途主要是用来操控已经处理过的文字。在33个字元之外的是95个可显示的字元,包含用键盘敲下空白键所产生的空白字元也算1个可显示字元(显示为空白)。

控制字符

Unicode表示法:当我们想在画面或纸张上表示这些控制字元时,就会显示成这个样子。过于老旧的系统或浏览器可能会看不到。使用微软任一中文输入法,输入`U2400即可看到␀,输入`U2401可看到␁,依此类推。

脱出字元表示法:通常用于终端机连线(例如Telnet通讯协定),以脱出字元^开头,再接一个符号,用来让这些控制字元得以在画面上显现。虽然看起来是两个字元,但在终端机上实际只有一个字元。在绝大部分的终端机系统中,包括Windows的命令提示字元(cmd.exe)、Linux和FreeBSD,都可用Ctrl代表脱出字元,输入想要的ASCII控制字元。例如想输入空字符,就要输入Ctrl+2,而非^@,后者会显示成两字元,前者只会显示成一字元。

二进制 十进制 十六进制 缩写 Unicode表示法 脱出字元表示法 名称/意义

0000 0000 0 00 NUL ␀ ^@ 空字符(Null)

0000 0001 1 01 SOH ␁ ^A 标题开始

0000 0010 2 02 STX ␂ ^B 本文开始

0000 0011 3 03 ETX ␃ ^C 本文结束

0000 0100 4 04 EOT ␄ ^D 传输结束

0000 0101 5 05 ENQ ␅ ^E 请求

0000 0110 6 06 ACK ␆ ^F 确认回应

0000 0111 7 07 BEL ␇ ^G 响铃

0000 1000 8 08 BS ␈ ^H 退格

0000 1001 9 09 HT ␉ ^I 水平定位符号

0000 1010 10 0A LF ␊ ^J 换行键

0000 1011 11 0B VT ␋ ^K 垂直定位符号

0000 1100 12 0C FF ␌ ^L 换页键

0000 1101 13 0D CR ␍ ^M Enter键

0000 1110 14 0E SO ␎ ^N 取消变换(Shift out)

0000 1111 15 0F SI ␏ ^O 启用变换(Shift in)

0001 0000 16 10 DLE ␐ ^P 跳出数据通讯

0001 0001 17 11 DC1 ␑ ^Q 设备控制一(XON 启用软体速度控制)

0001 0010 18 12 DC2 ␒ ^R 设备控制二

0001 0011 19 13 DC3 ␓ ^S 设备控制三(XOFF 停用软体速度控制)

0001 0100 20 14 DC4 ␔ ^T 设备控制四

0001 0101 21 15 NAK ␕ ^U 确认失败回应

0001 0110 22 16 SYN ␖ ^V 同步用暂停

0001 0111 23 17 ETB ␗ ^W 区块传输结束

0001 1000 24 18 CAN ␘ ^X 取消

0001 1001 25 19 EM ␙ ^Y 连线介质中断

0001 1010 26 1A SUB ␚ ^Z 替换

0001 1011 27 1B ESC ␛ ^[ 退出键

0001 1100 28 1C FS ␜ ^\ 文件分割符

0001 1101 29 1D GS ␝ ^] 群组分隔符

0001 1110 30 1E RS ␞ ^^ 记录分隔符

0001 1111 31 1F US ␟ ^_ 单元分隔符

0111 1111 127 7F DEL ␡ ^? 删除

可显示字符

缺点

ASCII的局限在于只能显示26个基本拉丁字母、阿拉伯数目字和英式标点符号,因此只能用于显示现代美国英语(而且在处理英语当中的外来词如naïve、café、élite等等时,所有重音符号都不得不去掉,即使这样做会违反拼写规则)。而EASCII虽然解决了部分西欧语言的显示问题,但对更多其他语言依然无能为力。因此现在的软件系统大多采用Unicode。

#include <stdio.h>

int main(int argc, char * argv) {

short idx;

for (idx = 0; idx <= 0x0FF; idx ++) {

if (idx % 16 == 0) {

printf("\n");

}

printf("%c", (char) idx);

}

return 0;

}

☺☻♥♦♣

♫☼

►◄↕‼¶§▬↨↑↓→←∟↔▲▼

!"#$%&'()*+,-./

0123456789:;<=>?

@ABCDEFGHIJKLMNO

PQRSTUVWXYZ[\]^_

`abcdefghijklmno

pqrstuvwxyz{|}~⌂

ÇüéâäàåçêëèïîìÄÅ

ÉæÆôöòûùÿÖÜ¢£¥₧ƒ

áíóúñѪº¿⌐¬½¼¡«»

░▒▓│┤╡╢╖╕╣║╗╝╜╛┐

└┴┬├─┼╞╟╚╔╩╦╠═╬╧

╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀

αßΓπΣσµτΦΘΩδ∞φε∩

≡±≥≤⌠⌡÷≈°∙·√ⁿ²■

Chcp437

Chcp932

#include <stdio.h>

int to_upper(const char * in, int cnt, char * out) {

char * p_in = ( char * )in;

char * p_out = out;

int i = 0;

while (p_in != NULL) {

if (i >= cnt) {

break;

}

if (*p_in >= 0x61 && *p_in <= 0x7A) {

*p_out = (*p_in) - 0x20;

} else {

*p_out = *p_in;

}

// printf("@to_upper[%c]=>[%c].\n", *p_in, *p_out);

p_in++;

i++;

p_out++;

}

return 0;

}

int main(int argc, char * argv) {

short idx;

char ch, ch1;

for (idx = 0; idx <= 0x0FF; idx ++) {

if (idx % 16 == 0) {

printf("\n");

}

ch1 = (char) idx;

to_upper((const char *)&ch1, 1, &ch);

printf("%c", ch);

}

return 0;

}

‑­

!"#$%&'()*+,-./

0123456789:;<=>?

@ABCDEFGHIJKLMNO

PQRSTUVWXYZ[\]^_

`ABCDEFGHIJKLMNO

PQRSTUVWXYZ{|}~

≠ヤ・㊧炎旧克・

髄駐舶沫・圀悃棔

。「」、・ヲァィゥェォャュョッ

ーアイウエオカキクケコサシスセソ

タチツテトナニヌネノハヒフヘホマ

ミムメモヤユヨラリルレロワン゙゚

珮粤蒟跚韜・・ⅰ

涇・

#include <stdio.h>

int to_upper(const char * in, int cnt, char * out) {

char * p_in = ( char * )in;

char * p_out = out;

int i = 0;

while (p_in != NULL) {

if (i >= cnt) {

break;

}

if (*p_in >= 0x61 && *p_in <= 0x7A) {

*p_out = (*p_in) - 0x20;

} else {

*p_out = *p_in;

}

// printf("@to_upper[%c]=>[%c].\n", *p_in, *p_out);

p_in++;

i++;

p_out++;

}

return 0;

}

int to_lower(const char * in, int cnt, char * out) {

char * p_in = (char *)in;

char * p_out = out;

int i = 0;

while (p_in != NULL) {

if (i >= cnt) {

break;

}

if (*p_in >= 0x41 && *p_in <= 0x5A) {

*p_out = (*p_in) + 0x20;

}

else {

*p_out = *p_in;

}

// printf("@to_upper[%c]=>[%c].\n", *p_in, *p_out);

p_in++;

i++;

p_out++;

}

return 0;

}

int main(int argc, char * argv) {

short idx;

char ch, ch1;

for (idx = 0; idx <= 0x0FF; idx ++) {

if (idx % 16 == 0) {

printf("\n");

}

ch1 = (char) idx;

// to_upper((const char *)&ch1, 1, &ch);

to_lower((const char *)&ch1, 1, &ch);

printf("%c", ch);

}

return 0;

}

‑­

!"#$%&'()*+,-./

0123456789:;<=>?

@abcdefghijklmno

pqrstuvwxyz[\]^_

`abcdefghijklmno

pqrstuvwxyz{|}~

≠ヤ・㊧炎旧克・

髄駐舶沫・圀悃棔

。「」、・ヲァィゥェォャュョッ

ーアイウエオカキクケコサシスセソ

タチツテトナニヌネノハヒフヘホマ

ミムメモヤユヨラリルレロワン゙゚

珮粤蒟跚韜・・ⅰ

涇・

内码

内码是指计算机汉字系统中使用的二进制字符编码,是沟通输入、输出与系统平台之间的交换码,通过内码可以达到通用和高效率传输文本的目的。比如MS Word中所存储和调用的就是内码而非图形文字。英文ASCII字符采用一个字节的内码表示,中文字符如国标字符集中,GB2312、GB12345、GB13000皆用双字节内码,GB18030(27,533汉字)双字节内码汉字为20,902个,其余6,631个汉字用四字节内码。

分类

字符编码:字符编码就是以二进制的数字来对应字符集的字符,目前用得最普遍的字符集是ANSI,对应ANSI字符集的二进制编码就称为ANSI码,DOS和Windows系统都使用了ANSI码,但在系统中使用的字符编码要经过二进制转换,称为系统内码。

汉字内码:ANSI码是单一字节(8位二进制数)的编码集,最多只能表示256个字符,不能表示众多的汉字字符,各个国家和地区在ANSI码的基础上又设计了各种不同的汉字编码集,以能够处理大数量的汉字字符。这些编码使用单字节来表示ANSI的英文字符(即兼容ANSI码),使用双字节来表示汉字字符。由于一个系统中只能有一种汉字内码,不能识别其它汉字内码的字符,造成了交流的不便。

GB码:GB码是1980年国家公布的简体汉字编码方案,在大陆、新加坡得到广泛的使用,也称国标码。国标码对6763个汉字集进行了编码,涵盖了大多数正在使用的汉字。

GBK码:GBK码是GB码的扩展字符编码,对多达2万多的简繁汉字进行了编码,简体版的Win95和Win98都是使用GBK作系统内码。

BIG5码:BIG5码是针对繁体汉字的汉字编码,在台湾、香港的电脑系统中得到普遍应用。

HZ码:HZ码是在Internet上广泛使用的一种汉字编码。

ISO-2022CJK码:ISO-2022是国际标准组织(ISO)为各种语言字符制定的编码标准。采用二个字节编码,其中汉语编码称ISO-2022 CN,日语、韩语的编码分别称JP、KR。一般将三者合称CJK码。CJK码主要在Internet网络中使用。

Unicode码:Unicode码也是一种国际标准编码,采用二个字节编码,与ANSI码不兼容。在网络、Windows系统和很多大型软件中得到应用。

内码转换

由于历史、地区原因,有时一种文字会出现多种编码方案,特别是汉字。由于不同于系统内码的字符不能在该系统中正常显示,必须要进行字符的内码转换,即将非系统内码的字符转换为系统可以识别的内码字符。南极星、四通利方、MagicWin98、两岸通、汉字通等都是这样的内码转换工具。

字符编码--第3章 字符的存储--EUC

转载于:https://my.oschina.net/dubenju/blog/501348

字符编码--第3章 字符的存储--ASCII(1967年)相关推荐

  1. MySQL的字符编码体系(一)——数据存储编码

    安装MySQL好多次了,每次都会纠结于数据库的字符编码配置,所以我决定这一次彻底把它理清. MySQL的字符编码结构比較细,它慷慨向分为两个部分:数据存储编码和传输数据编码.本篇讨论数据存储编码部分, ...

  2. 字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?

    字符编码知识:Unicode.UTF-8.ASCII.GB2312等编码之间是如何转换的? 字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得字符编码的知识.不注意的人可能对这个不在意,但这些 ...

  3. PLSQL Developer 插入中文 乱码问题,如图 这个是由于oracle服务器端字符编码 和 Oracle 客户端 字符编码不一致引起的。 检查Oracle服务器端字符编码,用 sel

    PLSQL Developer 插入中文 乱码问题,如图 这个是由于oracle服务器端字符编码 和 Oracle 客户端 字符编码不一致引起的. 检查Oracle服务器端字符编码,用 select ...

  4. 关于字符编码,你所需要知道的(ASCII,Unicode,Utf-8,GB2312…)

    字符编码的问题看似很小,经常被技术人员忽视,但是很容易导致一些莫名其妙的问题.这里总结了一下字符编码的一些普及性的知识,希望对大家有所帮助. 还是得从ASCII码说起 说到字符编码,不得不说ASCII ...

  5. python中字符编码使用_python中字符编码是什么?如何转换字符?

    屏幕前我们看到的文字,在计算机中也是这样表示吗?事实上,我们所有的信息电脑是无法直接理解的,同样我们所要表达的信息,计算机也不能看懂.这就需要架起一个理解的桥梁,也就是编码帮助我们相互之间进行翻译.今 ...

  6. 【字符编码】彻底理解字符编码

    一.前言 在解决昨天的问题时,又引出了很多新的问题,如为什么要进行编码,这些编码的关系如何,如ASCII,IOS-8859-1,GB2312,GBK,Unicode之间的关系,笔者想要彻底理解字符编码 ...

  7. java字符编码详解_java字符编码详解

    1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...

  8. 【字符编码】 简洁理解ANSI,UTF8,Unicode,ASCII编码的差别

    目录 简略 说明 1.  ASCII和ANSI编码 2. UNICODE 4.  UTF-8 参考 简略 ASCII             1个字节=1个文字 ANSI                ...

  9. python字符编码是什么_python3字符编码是什么?怎么用?

    最近一直讲的是python基础方面的知识,小编一直在考虑要不要加大难度.这个问题犹豫了很久,怕一些python小白不能很好的接受知识点.但是最近小编收到不少小伙伴的强烈要求,想要学习编码这个模块的知识 ...

最新文章

  1. python编程代码示例_python编程线性回归代码示例
  2. 关于对J2EE几点误解和错误认识的澄清
  3. 【Centos】利用Vultr服务器和namesilo布网
  4. llinux基本操作
  5. 使用OpenVINO遇到No name 'IENetwork' in module 'openvino.inference_engine'解决
  6. HTML5图片怎么添加渐变,HTML5 canvas图和实现填充渐变形状
  7. Java学习笔记(十)--控制台输入输出
  8. 浙江大学计算机与机械工程,中国26所“机械工程”大学经调整、合并,浙大、西交、同济升级...
  9. 第1节 连通性强连通、割点和桥(一)
  10. 电子商务概论_大学专业介绍之“电子商务专业”
  11. 《和平精英》:新军需山经魅狐、滑板小狐今日正式上线,很帅气!
  12. HTTP长连接与短链接以及推送技术原理
  13. Ubuntu18.04安装百度网盘客户端
  14. SOLIDWORKS出工程图时,小数点前的“0”不显示怎么办?
  15. 初探 Redis 客户端 Lettuce:真香!
  16. 重磅突发!支付宝下架互联网存款产品,蚂蚁集团回应
  17. ANTLR4 入门学习(一):下载和测试
  18. ListView 里面的checkBox,当其中一个被选中,其余全不被选中
  19. Eclipse中XML文件以表格形式显示
  20. 20145124 陈威名 第九周学习总结

热门文章

  1. 杨校老师课堂之JavaScript右下角广告弹框教程
  2. LayUI 数据表格 分页失效
  3. OpenCV基于Python霍夫圆检测—标准霍夫圆检测
  4. 3. 使用DSPack打开摄像头
  5. matlab中的脚本与函数、自相关函数corr,xcorr,corrcoef的应用
  6. 实现简单的二维码批量下载功能
  7. 使用Naive Bayes进行文本分类
  8. Django框架(八)--单表增删改查,在Python脚本中调用Django环境
  9. python入门教程NO.3 用python破解谍报密码
  10. 利用ESP8266Audio库实现ESP8266语音播报功能