zoukankan      html  css  js  c++  java
  • 字符编码的奥秘

     文件的存储方式:
         文件都有自己的存储格式,比如最常见的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++自带的功能

  • 相关阅读:
    java----session
    js封装成插件-------Canvas统计图插件编写
    js封装成插件
    js学习--变量作用域和作用域链
    学习js函数--自执行函数
    学习js函数--函数定义
    footer不满一屏时在最底部,超出一屏时在页面最下部
    ios 点击区域阴影问题
    提交表单后数据返回时间过长
    点击显示video
  • 原文地址:https://www.cnblogs.com/chris-cp/p/3712311.html
Copyright © 2011-2022 走看看