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

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

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

    love fish大鵬一曰同風起,扶搖直上九萬里

    常用鏈接

    統計

    積分與排名

    friends

    link

    最新評論

    編碼問題(轉)

    今天看了子華的博客中關于昨晚我們討論編碼方面的問題,發現其中有一個關鍵點沒有談到。
    ??? 情況是這樣的:我們現在使用的一個名為Notepad++的編輯器,它大體上和UltraEdit類似,是我從sourceforge上下載下載使用的。它有個格式的功能,簡單而言就是設置使用ascii編碼編輯文檔還是使用utf-8編碼,其實這里主要是對應非英文方面的字符才發生差異。
    ??? 如前那篇隨筆所述utf-8只是用于在數據傳輸時將字符串分割成字節傳輸出去,它對于unicode編碼有著嚴格的一一對應關系,而對于gb2312、gbk、gb18030之類的中文編碼是沒有對應關系的。gb2312、gbk、gb18030是在ascii編碼之上進行的中文編碼開發,所以它們是與ascii相兼容的,可以這么理解在我們的文本編輯器中ascii方式編輯的文本是以ascii碼保存,而以utf-8方式編輯的文本是以unicode編碼保存。
    ??? 現在,編碼的差異就在這里發生了,unicode中的英文部分編碼是與ascii相兼容的,具體而言是iso8859-1兼容,所以我們無論用什么編碼保存方式保存jsp文件,在網頁上顯示的都是正確的英文字符。但是對于中文這個保存的格式卻非常重要。在了解了jsp頁面的顯示過程我們就會明白其中的原因。
    ??? 現在回頭來看看jsp文件是經過了哪些步驟才在網頁上顯示出來的。
    ??? 1、首先我們用編輯器編輯jsp頁面代碼保存;
    ??? 2、web服務器對其進行編譯,將jsp頁面編譯成為一個java的class文件;
    ??? 3、web服務器將其class文件用傳輸格式在網絡上傳輸;
    ??? 4、客戶端瀏覽器解析代碼生成頁面。
    ??? 過程大致如上,能夠影響編碼方面的基本上在1、2、4方面,所以對其進行詳細講解。
    ??? 我們的編輯器是有一種默認的編碼保存方式的。這會到后面java編譯器是否將其中的中文進行轉換的問題。大家都知道java是以十六位的unicode編碼編譯、存儲java文件的。因為同一個漢字在unicode編碼和gb2312編碼中的位置是不一樣的,(具體而言就是這兩種編碼沒有兼容性,也不能通過公式換算出來,只能通過字符對應表進行轉換)
    ??? 上面指出的保存格式的重要性就在這里體現出來了,這也是很多人容易遺漏之處,當我們用默認格式位gbk的編輯器編輯jsp頁面,而在其頭部聲明charset=utf-8,那么返回的頁面會出現亂碼,而charset=gb2312則正常顯示。本人分析原因在于,在charset=utf-8的聲明有誤時,java編譯器會錯誤的認為現在保存的文件就是以unicode編碼格式保存的文件,所以在編譯中就不對其中的中文字符進行gb2312--unicode的轉化,而直接將其gb2312指向的編碼地址保存為unicode的編碼地址。反之,當編輯器的默認編輯保存格式為utf-8時,在jsp中聲明為gb2312,就會讓編譯器畫蛇添足的多進行一次中文編碼轉換,從而亂碼出現。
    ??? 綜上所述,編輯器的默認編碼方式是在解決中文亂碼方面是很重要的一個因素,當然我們可以用pageEncoding參數來說明文本編碼形式。弄清中文顯示后面的具體調用過程是徹底解決該類問題的終極之道!

    posted on 2006-12-07 14:42 stme 閱讀(490) 評論(7) ?編輯?收藏引用收藏至365Key

    評論

    #?re: 編碼問題 2006-12-07 16:22 BeanSoft

    不錯, 必須在頭部加入下列聲明:

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK"%>

    要不然你就得用編輯器另存為的時候(例如記事本就有這個功能, 但是貌似有問題)轉換編碼為 UTF-8.

    服務器看到 contentType="text/html; charset=UTF-8" 的頁面聲明的時候, 就認為下面的內容都是 UTF-8, 如果這時候不加上 pageEncoding, 出來的內容自然就是亂碼.

    因此要么都用 GBK, 要么都用 UTF-8. 可以在 Eclipse 里進行設置讓所有的源文件的默認字符集都是 UTF-8. 如果要做開源項目, 強烈建議的是不要用 GBK 格式的編碼, 用 UTF-8 是上上策. 還有就是鼓勵英文注釋, 網頁內容國際化, 呵呵.??回復??

    #?re: 編碼問題 2006-12-07 17:00 hahahehe

    1、首先我們用編輯器編輯jsp頁面代碼保存;
    2、web服務器對其進行編譯,將jsp頁面編譯成為一個java的class文件;
    3、web服務器將其class文件用傳輸格式在網絡上傳輸;
    4、客戶端瀏覽器解析代碼生成頁面。

    非applet的情況下,服務器怎么可能把class傳輸到網絡上去,瀏覽器又怎么可能解析class?服務器傳輸的是html,class生成html的過程早在服務器端就已經完成。

    亂碼的直接原因就在于服務器在頭里告訴瀏覽器的編碼 charset=UTF-8 和事實上生成html的編碼是不一致的??回復??

    #?re: 編碼問題 2006-12-07 17:13 BeanSoft[匿名]

    呵呵, 這段話的確是有點問題...

    應該是:
    1. 我們用代碼編輯器編輯了一個頁面(encoding=GBK)
    2. Web 服務器調用編譯器將其編譯為 servlet(編譯器也會有個 encoding 選項, 一般都是跟著系統的 encoding 走, 頁面有 charset 的話就跟頁面的 charset 或者 pageEncoding 一致, 所以有時候不指定JSP編譯默認編碼, 不同的服務器出來的結果就不一樣), (encoding=GBK);
    3. 生成 HTML, 這沒啥, 直接 write string;
    4. 瀏覽器根據 head 里的 contentType (UTF-8)來判斷編碼, 或者根據頁面里的 meta 來判斷編碼
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">, 什么都沒的時候就當成西歐字符集, 具體哪個優先? 印象中是頁面里的 meta 優先, 這時候客戶需要手工選一個編碼才能看到正確的網頁.

    所以只有這些條件都一致的時候, 才不會亂碼, 否則都會亂碼. 一般推薦全用 UTF-8(英文服務器環境) 或者 GBK(中文服務器).??回復??

    #?re: 編碼問題 2006-12-08 00:27 weidagang2046

    上次看你另一篇文章,對編碼分析得很詳細,很有幫助。再接再厲!??回復??

    #?re: 編碼問題 2006-12-08 09:44 stme[匿名]

    謝謝大家的點評,大家一起進步吧!??回復??

    #?re: 編碼問題 2006-12-08 13:44 laoshi

    >>utf-8只是用于在數據傳輸時將字符串分割成字節傳輸出去,它對于unicode編碼有著嚴格的一一對應關系,而對于gb2312、gbk、gb18030之類的中文編碼是沒有對應關系的。gb2312、gbk、gb18030是在ascii編碼之上進行的中文編碼開發,所以它們是與ascii相兼容的
    gb18030也和unicode有著嚴格的一一對應關系,gb2312、gbk和unicode的子集有著嚴格的一一對應關系
    UTF-8和gb18030都是所謂的外碼標準
    “gb2312、gbk、gb18030是在ascii編碼之上進行的中文編碼開發,所以它們是與ascii相兼容的”是錯誤的,只能說UTF-8以及國標編碼的單字節編碼區和ascii的0~7F區的編碼是一致的。
    Notepad++和UltraEdit的ascii其實并不是ascii,而是指Windows平臺的本地多字節字符集,一般咱們用的中文Windows上就是gbk??回復??

    #?re: 編碼問題2006-12-08 16:13 luguoren

    ”gb18030也和unicode有著嚴格的一一對應關系,gb2312、gbk和unicode的子集有著嚴格的一一對應關系“
    這個是對的嗎?本人好像沒有看到這樣的資料,gb18030只是一部分與unicode對應,不會是全部一一對應吧??回復??

    posted on 2006-12-10 11:46 liaojiyong 閱讀(441) 評論(0)  編輯  收藏 所屬分類: JSP

    主站蜘蛛池模板: 亚洲人成小说网站色| 亚洲欧洲日产国产综合网| 77777午夜亚洲| 污视频在线免费观看| 亚洲精华液一二三产区| 国产大片免费网站不卡美女| 久久av无码专区亚洲av桃花岛| 亚洲国产成人精品青青草原| 中文字幕免费在线| 亚洲国产韩国一区二区| 无码人妻一区二区三区免费 | a毛片免费全部播放完整成| 久久国产成人精品国产成人亚洲| 一级毛片高清免费播放| 真人做人试看60分钟免费视频| 亚洲自偷自拍另类图片二区| 成人免费的性色视频| 亚洲人成色在线观看| 国产一级淫片a视频免费观看| 免费大片av手机看片| 亚洲自偷自偷在线制服| 亚洲免费视频网站| 在线综合亚洲中文精品| 亚洲成年人啊啊aa在线观看| a级精品九九九大片免费看| 91亚洲精品第一综合不卡播放| 色婷婷7777免费视频在线观看 | 精品亚洲成a人片在线观看少妇 | 成熟女人牲交片免费观看视频| 亚洲日韩国产欧美一区二区三区 | 美女在线视频观看影院免费天天看| 亚洲免费视频在线观看| 国内精品乱码卡1卡2卡3免费| 亚洲成a∨人片在无码2023| 国产av无码专区亚洲国产精品 | 久久久久久久久久国产精品免费| 亚洲国产高清在线精品一区| 亚洲?v女人的天堂在线观看 | 手机在线毛片免费播放| 国产人成网在线播放VA免费| 亚洲日本国产乱码va在线观看|