字符编码的奥秘

 文件的存储方式:
     文件都有自己的存储格式,比如最常见的txt,cpp,h,c,xml ,png, rmvb各种格式,还有自定义格式。这些文件不论是什么格式,都是存储在计算机硬盘里的2进制格存储,对应不同文件格式,有不同的软件解析。这篇文章不谈 文件是如何存储的,只谈文件是如何解析的。
     文本文件解析:
     文本文件对应于人类可以阅读的文本,如何从2进制转换为文本文件呢?起初由于计算机在美国发明,自然大家考虑的是英语如何表示,英语字母总共26个,加 上特殊字符,128个字符,7位既一个byte即可表示出来。这个就是大家所熟知的ascill编码。对应关系很简单,一个字符对应一一个byte。
     但很快发现,其他非英语国家的文字远远超过ascill码,这时候大家当然想统一字符编码,不同国家出了自己不同的编码方式,中国的gb2312就是自 己做出来的编码方式,这样下去每个国家都有自己的编码方式,来回转换太麻烦了。这时候出现了新的编码方式,unicode编码方式,想将编码统一,所以规 定了每个字符对应的unicode码。
     1、很多文件都是ascii编码,如果用unicode 太浪费。
     2、没有标志位说明该几个字节来解析为一个符号。
     这时候拯救世界的utf出现了,utf是unicode的一种实现,只不过更聪明了。utf16是占用两字节,或者四字节,utf32是占用四字节。utf8是很聪明的一种表示方式。
     1、对于单字节符号,字节第一位为0,后面7位表示字节编码。
     2、对于n字节符号,第一字节的前n位都设为1,第n+1位为0,其余位为编码位置。
对于不同的编码,在文本的最前方有不同的标志,unicode 通常有两位来表示分别是ff fe, 或者feff, fffe表示big-endian 编码feff表示litte-endian编码。utf8是efbbbf来开头的。可以看出来utf-8是自解释的,所以不用带这个标志文件,大多数程序 是可以识别的。但有些程序不能识别这个标志,比如php就会直接把这个标志当文本解析,不会忽略。相信很多遇到php输出文本解析乱码或者解析错误的同学 都遇到这样的问题。
    如何解决问题:
    如果有vim那最好不过了,去掉命令:
    set encoding=utf-8
    set nobomb
    添加命令:
    set encoding=utf-8
    set bomb
   或者使用notepad++自带的功能

 

时间: 2024-07-30 10:40:37

字符编码的奥秘的相关文章

【字符编码】字符编码的奥秘

       字符编码相信是每个程序员的噩梦,只要是有中文的地方,总是会遇到各种编码的问题,并且这种问题还非常难缠,尤其在linux上,因为上面很多软件都是针对 英语国家开发的,是不会考虑其他语种编码问题.在遇到编码的无数大坑之后,我决定仔细研究下编码问题,因为这就像一道坎一直横在你面前,每次到这里你都会 跌到,每次爬起来之后,你都若无其事,这样的人被称作战士,真正的战士.可惜是个力量战士,做为新时代的智力战士,当然不能在那跌到然后又在这继续跌到.      文件的存储方式:      文件都有

文件名的字符编码和c的fopen函数问题

问题描述 文件名的字符编码和c的fopen函数问题 问一个问题,文件名的存储和文件名的显示应该是两回事吧 中文版windows的环境字符集是GBK GBK中"茅"的编码是 195 169(十进制) 如果我在中文版windows里看到个文件叫"a茅" 那么他的文件名在硬盘中的存储方式应该是97 195 169 我编了个c程序如下: FILE *fp; char b[100]={'a',195,169,0}; strcat(b,".html"); i

ajax代理程序,自动判断字符编码

ajax|编码|程序 由于ajax在跨域的访问上有问题,目前最好的方法是做代理.写了个代理程序和心得 为了做ajax的代理,研究了下服务器端的xmlhttp并和客户端的ajax中的xmlhttp做了个比较,后台代码是asp的 服务器端的xmlhttp也就是asp小偷程序,我把代码改成了javascript. 1.在服务器端的xmlhttp.Open("GET",url,false)异步必须是关闭的,而客户端的异步是打开的,这个很好理解. 2.在服务器端的xmlhttp.Response

ajax代理程序自动判断字符编码

ajax|编码|程序 由于ajax在跨域的访问上有问题,目前最好的方法是做代理.写了个代理程序和心得. 为了做ajax的代理,研究了下服务器端的xmlhttp并和客户端的ajax中的xmlhttp做了个比较,后台代码是asp的. 服务器端的xmlhttp也就是asp小偷程序,我把代码改成了javascript. 1.在服务器端的xmlhttp.Open("GET",url,false)异步必须是关闭的,而客户端的异步是打开的,这个很好理解.2.在服务器端的xmlhttp.Respons

tomcat下的jsp和servlet的字符编码问题

js|servlet|编码|问题 使用filter来改变request的编码 在前面的文章里面,我们讨论了在tomcat下的jsp和servlet的字符编码问题! 知道当没有指定request的编码的时候,从客户端得到的数据是iso-8859-1编码的(request.getParameter()得到传递的参数值): 但是我们怎么来改变request的编码呢? 方法有很多种!  比如:在getRequestDispatcher("/jsp/jsptoserv/hello.jsp").f

JAVA里字符编码的探索与理解

编码 今天终于把JAVA里一个比较头痛的问题--字符编码弄清晰了,所以写一篇文章来纪念一下,也为大家提供一点自己的心得. 众所周知,JAVA为了国际通用,用的是UNICODE来保存里面的字符.而UNICODE只是一个种字符集,字符的存储和表示要用到一定的字符编码格式,而与UNICODE对应的字符编码格式就是我们常看到的UTF-8,UTF-16等等,而UTF-8是最常用的,所以人们常常把它和UNICODE等同起来(我以前就是这样的),这在某些情况下是没有错的,但这样的理解在JAVA里就会产生一些混

.NET自动字符编码识别程序库 NChardet

编码|程序 什么是NChardet      NChardet是mozilla自动字符编码识别程序库chardet的.NET实现,它移植自jchardet,chardet的java版实现,可实现对给定字符流的编码探测.  NChardet是如何工作的      NChardet通过逐个比较输入字符来猜测编码:由于是猜测,所以可能会有不能完全识别的情况:如果输入字符不能确定正确的编码,那么NChardet会给出一组可能的编码值.  如何使用NChardet     要使用NChardet来探测编码

解读HTML:命名空间与字符编码

在做项目的过程中,我们经常会建立各种各样的规范,以方便团队之间更好的合作更好的完成项目:同样我们也经常会听到各种各样的协议,比如Google的IM软件Gtalk使用的开放的XMPP协议,只要其他IM软件也遵循XMPP协议就能与Gtalk使用互通:而互联网上的信息无以计数,这些信息本身是独立存在的,如何将其串联并呈现在用户眼前,就需要使用到HTTP协议. 同样的道理,因为浏览器们各自的内核不同,对于默认样式的渲染也不尽相同,所以就需要一份各浏览器都遵循的规则来保证同一个网页文档在不同浏览器上呈现出

C#编程总结(九)字符编码

相信大家一定遇到过乱码的问题,为什么会乱码呢?输出的数据怎么就跟输入的不一样呢? 最近在总结加密问题,也遇到了同样的困扰.所以今天来集中解决这个问题. 什么是字符? 字符是指计算机中使用的字母.数字.字和符号,包括:1.2.3.A.B.C.~!·#¥% ---*()--+等等. 字符集(Charset) 字符集(Charset)是一个系统支持的所有抽象字符的集合. 字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等. 什么是字符编码? 字符编码(Character Encod