关于字符的一些看法

字符真是个令人头疼的东西,弄不好就乱码了。呵呵,所以就花了大半天自己梳理了下。嘿嘿。

1 Ascii 码

学过电脑的都知道,电脑中的数据存储和运算都是靠比特流进行的,也就是0,1组成的二进制代码串。但是我们不可能输入0,1这些东西到电脑里把,根本记不住啦。所以,需要把输入的东西转为那些二进制代码。这时,美国人就制定了一个叫Ascii码的东西,Ascii码就是8位二进制代码(通常用7位),8位可以表示256个不同的字符了。英文用用早就够了。顺便说一句,英文字符都是单字节的,也就8个位把,汉字是双字节或多字节的。

2 Ascii码的问题

但是随着互联网的扩张,就出现了2个问题。1. 256个字符根本不够用啊,像中文这么多字,遇到Ascii就呵呵了。2. 还有就是不同的编码代表了不同符号。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (?),在俄语编码中又会代表另一个符号。

3 Unicode

因为存在许多编码方式,所以同一段2进制代码可以被解释成不同的语言。所以打开一个文件,必须知道文件的编码格式,才能正确打开文件,不至于乱码。就比如html,中有个meta标签,charset=utf-8 就是用来表明文件的编码声明是utf-8,当然保存的时候,文件也要保存成为utf-8格式,这样,浏览器拿到这个html的时候,就知道用utf-8去解析这个html了。但是假如申明了charset=utf-8但是保存的时候用了别的编码格式,如ASCII.就会乱码了。说白了就是一个文字-》二进制(编码),二进制-》文字(解码,浏览器来解码),编码格式与解码格式需一致。

4  Unicode的问题

unicode有啥问题嫩?应该是存储东西把。汉字一个2个字节,16位,unicode要用到2个字节,这没问题。但是假如把unicode都设置为2个字节的话就太浪费啦。因为英文字母都是一个字节的,用 2个字节存储的话,前面一个字节都要填0了,空间就增大了1倍。

5 UTF-8

这个时候UTF-8就站了出来,解决存储的问题(utf-8是unicode的编码格式)。utf-8是可变的字节长度。对英文字母,它就是一个字节,对汉字,它可以变为2-4个字节。棒棒哒。另外还有个叫BOM的东西,把字符转为16进制的时候可以看到,比如把我在utf-8编码的情况下转为16进制,就是 EF BB BF E6 88 91,假如用无BOM的情况保存的话,就是E6 88 91.

就这样把,希望大家多多指教~~~~

参考文献:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html?20151227141854#comment-last

       http://www.joelonsoftware.com/articles/Unicode.html

     http://cenalulu.github.io/linux/character-encoding/ 

时间: 2024-08-14 20:53:25

关于字符的一些看法的相关文章

字节流与字符流的一些个人看法

一.字节与字符 IO操作,首先要提到字节与字符.字符串. 名称 数据类型 含义 字节 byte 是硬盘中文件存储的单位,也是网络传输信息的单位. 字符 char 我们常用的字母.数字.字和符号. 字符串 String 字符的集合,char[]的封装类型 笼统来讲,字节用来与文件打交道,而字符用来和人打交道 二.字节流与字符流 流,我的理解流就是用来传输水的水管,数据则是水管里面的水. 流有很多种分类方式,在这里只讨论按数据类型的分类,即字节流(OutputStream.InputStream)与

字符指针与字符数组

学了挺久的c语言,c语言有意思的就有指针这一大块,另外就是字符串,字符指针与字符数组的区别对于初学者应该是比较难以区分的,讲讲自己的看法. 1.定义上的区别 字符数组具有固定的地址,且字符数组的名字不能更改或运算. 字符指针是一个变量,用来存储首字符的地址,且指向的字符串通常为一个常量. char str[] = "helloworld"; str[4] = 'X'; printf("%s",str); 输出结果:hellXworld char *str = &qu

自己对Java的一点看法

作为一个理论性比较强的学生,谈一下这段时间对java以及对程序设计的理解 java相对于其它语言有几个特点,一个是面向对象,一个是强类型           首先谈谈面向对象,关于类和对象,这个一定要有深刻的认识,在类中,首先一个最重要的概念就是构造方法,为什么说它重要,就是因为你只要需要创建一个类地实例对象就需要调用到构造方法,这个就决定了这个类一开始要做什么,还是举一个例子吧         比如说BrfferedReader类,这个的构造方法就是BrfferedReader(Reader

字符型图片验证码识别完整过程及Python实现

1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻.本文介绍了一套字符验证码识别的完整流程,对于验证码安全和OCR识别技术都有一定的借鉴意义. 2   关键词 关键词:安全,字符图片,验证码识别,OCR,Python,SVM,PIL 3   免责声明 本文研究所用素材来自于某旧Web框架的网站 完全对外公开 的公共图片资源. 本文只做了该网站对外公开的公共图片资源进行了爬取, 并未越权 

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

转载地址:http://www.imkevinyang.com/2010/06/%E5%85%B3%E4%BA%8E%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81%EF%BC%8C%E4%BD%A0%E6%89%80%E9%9C%80%E8%A6%81%E7%9F%A5%E9%81%93%E7%9A%84.html 字符编码的问题看似很小,经常被技术人员忽视,但是很容易导致一些莫名其妙的问题.这里总结了一下字符编码的一些普及性的知识,希望对大家有所帮助. 还是得从ASC

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

字符编码的问题看似很小,经常被技术人员忽视,但是很容易导致一些莫名其妙的问题.这里总结了一下字符编码的一些普及性的知识,希望对大家有所帮助. 还是得从ASCII码说起 说到字符编码,不得不说ASCII码的简史.计算机一开始发明的时候是用来解决数字计算的问题,后来人们发现,计算机还可以做更多的事,例如文本处 理.但由于计算机只识“数”,因此人们必须告诉计算机哪个数字来代表哪个特定字符,例如65代表字母‘A’,66代表字母‘B’,以此类推.但是计算机之间字符-数字的对应关系必须得一致,否则就会造成同

对TCP/IP协议的一些看法(3):SLIP协议和PPP协议

今天主要讲一下我对链路层上的SLIP协议和PPP协议的看法.今天应该是写的第三天了,为自己的坚持点个赞. SLIP协议其实用到的并不多,它全名叫serial line imternet protocol,译为中文是串行线路网际协议.它属于低速串行线路,可用于专业线路,也可用于拨号线路,传输速率在1200bps到19200bps之间.对slip帧(因为它是链路层协议)的格式,主要需要记住的是一个END位,位于帧的首部和尾部,用于判断帧的开始与结束.这样就可能存在如果在帧中间有个END的话,数据帧就

C语言博客作业--字符数组

题目1:题目名称 本题PTA提交列表(要提交列表,不是结果) 设计思路(伪代码或流程图) 伪代码尽量文字描述,请用下面markdown符号渲染.如: 定义变量i表示XXXXX for i=0 to n-1 a[i]执行运算等等. end for 3.代码截图(注意,截图,截图,截图.不要粘贴博客上.不用用···语法去渲染) 4.本题调试过程碰到问题及PTA提交列表情况说明. PTA提交列表中的每个错误详细说明为什么及如何解决. 题目2,3同题目1 二.截图本周题目集的PTA最后排名.(2分) P

字符编码(全-转)

字符编码的问题看似很小,经常被技术人员忽视,但是很容易导致一些莫名其妙的问题.这里总结了一下字符编码的一些普及性的知识,希望对大家有所帮助. 还是得从ASCII码说起 说到字符编码,不得不说ASCII码的简史.计算机一开始发明的时候是用来解决数字计算的问题,后来人们发现,计算机还可以做更多的事,例如文本处理.但由于计算机只识"数",因此人们必须告诉计算机哪个数字来代表哪个特定字符,例如65代表字母'A',66代表字母'B',以此类推.但是计算机之间字符-数字的对应关系必须得一致,否则就