<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    老妖的博客
    現(xiàn)實(shí)的中沒(méi)有幾個(gè)人能夠真為對(duì)方去死,甚至山盟海誓很快就會(huì)在金錢(qián)面前變的微不足道,這才是生活。沒(méi)有永遠(yuǎn)的愛(ài),除了你的父母對(duì)你,當(dāng)然也就沒(méi)有永遠(yuǎn)的恨,更沒(méi)有永遠(yuǎn)的痛,時(shí)間是最好的治療大師,它會(huì)很快撫平你心靈上累累的傷痕。很多年以后你想起來(lái)時(shí),那些在你生命中洶涌來(lái)往的人群至多是個(gè)模糊的影子或者毫無(wú)意義的名字
    posts - 105,  comments - 171,  trackbacks - 0

    本次對(duì)UUZone Refactor中一個(gè)大動(dòng)作就是采用UTF-8編碼,由于種種的歷史原因,uuzone一直采用GBK編碼,現(xiàn)在要把這個(gè)編碼轉(zhuǎn)成為UTF-8的。

    本文不打算討論技術(shù), 所以簡(jiǎn)單地說(shuō)明這個(gè)工作進(jìn)展的一個(gè)過(guò)程:

    * 最早的時(shí)候,n年前,我們一個(gè)項(xiàng)目需要國(guó)際化支持,毫無(wú)疑問(wèn)utf-8是最佳的編碼選擇,這時(shí)候項(xiàng)目組就遇到了問(wèn)題: 本地編寫(xiě)的文件中的中文都是GBK編碼的, 僅僅設(shè)置頁(yè)面的contentType="text/html; charset=UTF-8", 出來(lái)的全是亂碼...當(dāng)然拿GBK的東西直接要求對(duì)方用UTF-8看,一定是亂碼.?

    ?? 當(dāng)時(shí)如何解決的過(guò)程已經(jīng)無(wú)法了解, 但最終采用的方案是:? 用GBK寫(xiě)文件, 然后采用JDK中的native2ascii工具轉(zhuǎn)換. 問(wèn)題解決了, 但結(jié)果就是多了轉(zhuǎn)碼的過(guò)程, 轉(zhuǎn)碼后的jsp文件人不可讀.

    * 做uuzone了,? 項(xiàng)目組建議采用GBK編碼, 因?yàn)槟莻€(gè)轉(zhuǎn)碼工作太繁瑣了,而且導(dǎo)致文件不可讀, 調(diào)試非常麻煩. 于是uuzone就成了GBK的.

    ?? 由于采用GBK, 遇到了很多相關(guān)的問(wèn)題... 中途至少有2次我"建議"改用UTF-8, 都被評(píng)估認(rèn)為有太多問(wèn)題而沒(méi)有被采納(郁悶的boss啊...)...

    * 發(fā)現(xiàn)原來(lái)不需要轉(zhuǎn)碼!? 終于處于某些原因, 我需要自己動(dòng)手來(lái)研究一些技術(shù)細(xì)節(jié), 發(fā)現(xiàn)native2ascii轉(zhuǎn)碼的工作其實(shí)并不需要進(jìn)行. jsp文件可以直接保存為UTF-8編碼, 輸出的結(jié)果就是UTF-8的...而現(xiàn)在的elips,editplus, ultraedit, 甚至notepad都能保存和識(shí)別utf-8的文件.

    * 終于下定決心轉(zhuǎn)為UTF-8. 既然如此, 就沒(méi)有理由拒絕了. 因此本次refactor項(xiàng)目目標(biāo)之一就是改用UTF-8.? 既然文件打算用utf-8保存, 那么就需要批量轉(zhuǎn)換工具...幾下search, 好的工具也找到了.

    * 轉(zhuǎn)! ? 有工具, 不到20秒, 6000多個(gè)文件就從GBK轉(zhuǎn)成了UTF-8文件格式...

    * 問(wèn)題來(lái)了! 項(xiàng)目中的XML, properties文件是否轉(zhuǎn)碼呢? 本來(lái)計(jì)劃轉(zhuǎn)...但很快發(fā)現(xiàn),這些文件轉(zhuǎn)掉后, XML,properties文件的讀取都出了不同程度的問(wèn)題...總之項(xiàng)目將根本無(wú)法運(yùn)行... 原因何在?原來(lái)這些UTF-8的文件有一個(gè)所謂BOM頭,也就是告訴你這個(gè)文件的編碼是什么...不幸的是Java的xml parser, properties文件parser都不認(rèn)識(shí)這個(gè)BOM頭!已經(jīng)有人把這個(gè)作為Bug提交給了SUN并被接受, 可是這個(gè)bug一直拖了4年,才在去年在Mustang項(xiàng)目(Java 6.0)中解決! 我們顯然不能用了.

    * 幸運(yùn)的是... 我們可以規(guī)避這些問(wèn)題, 我們并不需要把XML, properties文件轉(zhuǎn)換成UTF-8的, 只要把jsp轉(zhuǎn)了即可. 雖然一個(gè)項(xiàng)目中的文件兩種保存格式,非常不優(yōu)雅, 但畢竟這能解決問(wèn)題啊... 轉(zhuǎn)換完jsp文件,運(yùn)行項(xiàng)目, 成功! 打開(kāi)browser...頁(yè)面也出來(lái)了!

    * 幾乎成功了! 是的, 幾乎成功了...然而在計(jì)算機(jī)的世界里幾乎成功就是不成功. 因?yàn)轫?yè)面上的樣式神秘地出了輕微的混亂. 經(jīng)過(guò)n十分鐘仔細(xì)研究討論, 終于發(fā)現(xiàn)產(chǎn)生的html頁(yè)面內(nèi)出現(xiàn)了幾個(gè)神秘的不可見(jiàn)字符... 就是這些可怕的不可見(jiàn)字符, 破壞了頁(yè)面的結(jié)構(gòu).

    * 神秘的隱身字符? 和計(jì)算機(jī)打交道和比人打交道強(qiáng)的一個(gè)地方就是在于 -- 如果計(jì)算機(jī)錯(cuò)了,一定是你錯(cuò)了, 因?yàn)橛?jì)算機(jī)一定忠實(shí)執(zhí)行你的指令. 神秘的不可見(jiàn)字符一定有其來(lái)歷. 經(jīng)過(guò)二進(jìn)制分析, 找到了這些神秘字符出現(xiàn)的地方 ---jsp include! 每次include就會(huì)出現(xiàn)神秘字符, 而這些神秘字符的值也是老朋友了 -- 就是BOM header !?

    * 難道不能include了?? 原來(lái)java顯然和xml文件一樣對(duì)待了這些BOM頭, 這些FF FE之類(lèi)的東西成了輸出的一部分. google 去查, 看到一個(gè)人顯然遇到完全相同的問(wèn)題, 可惜是個(gè)俄羅斯的程序員, 也看不懂其文章... :(

    ??? 怎么辦?? 有同學(xué)說(shuō): 既然你要UTF-8 (心想: 誰(shuí)讓你是boss呢? 愚蠢的boss啊...:-) ) , 我們還是用native2ascii吧...? 不行!?

    * 遇到困難要思考. 思考...

    ??? 首先, 為什么java文件不需要轉(zhuǎn)碼(java 文件中的中文無(wú)論如何都能正確)? 為什么jsp要? jsp不是被預(yù)編譯成java的嗎??

    ??? 從那個(gè)sun承認(rèn)的bug, 顯然可以得出一個(gè)結(jié)論, java虛擬機(jī)中的file input stream沒(méi)有能自動(dòng)很具BOM識(shí)別文件編碼.?

    ??? 也許javac是比較native的代碼, 能通過(guò)操作系統(tǒng)獲得native編碼類(lèi)型, 而java內(nèi)部是unicode的, 所以輸出也同樣沒(méi)問(wèn)題.? 而jsp是動(dòng)態(tài)編譯的, 預(yù)編譯器是JVM...其待遇顯然和xml等是一樣的...

    ?? 難道sun公司的人會(huì)愚蠢到這種地步? 不可能, 一定是我們愚蠢.繼續(xù)google 學(xué)習(xí)...

    ??? 不幸的是大部分google上關(guān)于這類(lèi)編碼問(wèn)題的討論都是不完整的. 但一個(gè)神秘的pageEncoding跳進(jìn)了眼簾, 已經(jīng)指定了contentType的encoding, 為什么還要指定pageEncoding?? 查一下jsp的資料, 顯然這正是問(wèn)題所在!? pageEncoding就是告訴JVM 這個(gè)jsp本身采用的encoding, 默認(rèn)采用iso-8859. 我們明明用GBK的native編碼, 讓JVM拿iso8859讀取,當(dāng)然不對(duì)了!!

    * 根本沒(méi)有需要轉(zhuǎn)碼, 問(wèn)題解決了! 是的, 明白了原因所在, 把所有jsp文件頭修改為: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK" %> 不需要任何轉(zhuǎn)碼,最終輸出的就是UTF-8, 沒(méi)有任何問(wèn)題. 而且這些文件采用native格式保存, 編輯最方便!

    posted on 2006-05-28 01:08 老妖 閱讀(2008) 評(píng)論(2)  編輯  收藏

    FeedBack:
    # re: 學(xué)藝要精,思考要慎.--轉(zhuǎn)UTF-8編碼的啟發(fā)
    2006-07-04 18:49 | Alex
    # re: 學(xué)藝要精,思考要慎.--轉(zhuǎn)UTF-8編碼的啟發(fā)
    2006-08-11 18:24 | 藍(lán)色一葉
    我是做wap開(kāi)發(fā)的,手機(jī)上就用UTF-8的編碼,是不是該用這樣的頭:
    <%@ page language="java" contentType="text/vnd.wap.wml; charset=UTF-8" pageEncoding="UTF-8" %>
    同時(shí),我jsp文件也是保存為UTF-8格式的,只是,被包含的文件無(wú)法寫(xiě)這個(gè)頭,寫(xiě)入后瀏覽器訪問(wèn)會(huì)提示:
    Page directive: can't have multiple occurrences of language
    那我應(yīng)該怎么設(shè)置jsp文件格式(UTF-8 OR ASCII?)?jsp的頭又該如何書(shū)寫(xiě)?我主頁(yè)面用上述頭,被包含文件什么都不寫(xiě)直接保存為UTF-8格式,訪問(wèn)也正常,但是有莫名字符(源文件里是“锘?”),該如何處理?  回復(fù)  更多評(píng)論
      

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    <2006年5月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    隨筆分類(lèi)(48)

    隨筆檔案(104)

    好友鏈接

    我的豆瓣

    積分與排名

    • 積分 - 220803
    • 排名 - 257

    最新評(píng)論

    閱讀排行榜

    主站蜘蛛池模板: 24小时日本电影免费看| 精品亚洲福利一区二区| 亚洲∧v久久久无码精品| 久久久精品国产亚洲成人满18免费网站 | 色婷婷六月亚洲婷婷丁香| 亚洲精品少妇30p| 好看的电影网站亚洲一区| 国产AV无码专区亚洲AV毛网站| 亚洲欧洲日产国码av系列天堂| 久久亚洲精品视频| 亚洲国产精品自在线一区二区| 亚洲成a人片77777老司机| 亚洲人成网址在线观看| 久久亚洲AV成人出白浆无码国产| 久久亚洲精品中文字幕| 91亚洲国产成人久久精品| 亚洲精品二三区伊人久久| 亚洲人成未满十八禁网站| 成人婷婷网色偷偷亚洲男人的天堂 | 日韩高清在线高清免费| 免费一级毛片免费播放| 久久久久一级精品亚洲国产成人综合AV区 | 成人A毛片免费观看网站| 精品免费tv久久久久久久| 最近中文字幕2019高清免费| 97免费人妻无码视频| 免费看a级黄色片| 亚洲人成人网站在线观看| 亚洲精品无码AV人在线播放| 亚洲综合久久1区2区3区| 亚洲精品福利你懂| 色屁屁www影院免费观看视频| 韩国免费A级毛片久久| 99re6在线精品视频免费播放| 最近2019中文免费字幕| 亚洲&#228;v永久无码精品天堂久久 | 2022中文字字幕久亚洲| 亚洲色图在线观看| 亚洲国产精品自在自线观看| 国产vA免费精品高清在线观看| 99视频在线免费看|