云's profileC for CloudPhotosBlogListsMore Tools Help

Blog


    March 25

    [技术!巨枯燥!] IIS的ASP服务神奇的编码问题,以及文本编辑器们对于BOM的处理

    编码(encoding)相关的问题那是一言难尽罄竹难书的,这里把遇到的问题简单说一下。 

    话说有个叫做BOMByte Order Mark)的东东,放在文件头用来标识整个文件是什么字节顺序的,主要为了标识utf-1632这种有大小端问题的编码到底是大端还是小端。但是丫们顺手的就给utf-8这种没有字节顺序问题的编码也加了个BOM。见下表: 

    Bytes

    Encoding Form

    00 00 FE FF

    UTF-32, big-endian

    FF FE 00 00

    UTF-32, little-endian

    FE FF

    UTF-16, big-endian

    FF FE

    UTF-16, little-endian

    EF BB BF

    UTF-8

     ASP Server于是很睿智的觉得,如果你的ASP源文件是什么编码的,那么,你的页面就是什么编码的,它会帮你把页面里面的所有东西,包括直接用Response.Write()吐到页面上的字们,都转成和源文件一个编码格式的。

     ASP Server于是就判断每个ASP源文件的BOM,你是“EF BB BF”,那就来utf-8这样。如果没有BOM呢,那就用系统编码,恭喜,在中国你就得到了GBK编码。

     糟糕的事情发生在,BOM是不可见的,所以呢,当中国的站长们非常酷的使用了和国际接轨的utf-8编码,而又没有使用一个支持BOM的文本编辑器(或者不知道BOM这回事)的时候,ASP Server会认为你们这些页面都tmGBK滴。所以有站长发给我页面代码里面,竟然把每段中文都放在一个函数里面,由那个函数把页面的utf-8字符转成转义过后的GBK(类似于土豆)来输出,否则编码就不正确。

     所以,哪些文本编辑器不支持BOM昵(就是说,它在存一个utf-8文件的时候,不会在前面加上“EF BB BF”),下面是我测试过的:



    NotepadWin自带的那个

    支持, 且不能不要

    Editplus

    可选,在配置项里面,中文还把BOM译成了“签名”OMG

    Notepad++

    可选

    UltraEdit

    支持,似乎不能不要

    PSPad

    不支持这个是我主要用的编辑器

    Vim

    我觉得不可能支持吧

    Eclipse

    不支持

     EclipsePSPad这种不理会BOM的编辑器,判断文件编码主要靠猜。

    March 11

    自创冷笑话一则

    甲:"老虎脖子上的铃铛,谁能解下?"
    乙:"解铃还需系铃人"
    甲:"系铃人上次被老虎吃掉了"