• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    [asp]讓你知道codepage的重要

    發布: 2007-6-30 18:56 | 作者: admin | 來源: | 查看: 12次 | 進入軟件測試論壇討論

    領測軟件測試網

    這幾天研究UTF-8編碼,太暈了,把我的看法和各位討論討論。
    歡迎來批啊。以下都是我的想法,哪里有不對的請不吝賜教,幫忙指出來。

    相關的題外話:

    一、操作系統
    window系統內部都是unicode的。文件夾名,文件名等都是unicode的,任何語言系統下都能正常顯示。

    二、輸入法:
    微軟拼音輸出的是Unicode的,智能ABC輸出是簡體中文的(所以智能ABC在非簡體中文系統根本不能用,只能打英文)。

    三、網頁的textarea
    網頁的textarea是用unicode顯示的。所以往里打什么字都能顯示。而一些flash做的輸入框就不行了。

    四、Access2000
    access里面保存的數據是unicode的,在任何語言系統下都能顯示。
    如果數據視圖查看有些字符不正常,那是因為顯示所用的字體不是Unicode字體,
    換用Arial Unicode MS 字體就能全部顯示了。(access幫助,搜索,輸入unicode,有說明)

    五、Word
    word里的繁簡轉換,簡體轉換到繁體后,內碼仍是簡體中文的,其實只是簡體中的繁體字。

    六、ASP內部是Unicode的,所有文本都是Unicode存儲的。需要時轉換到指定字符集。

    首先說下結論:
    <%@ codepage=936%>簡體中文
    <%@ codepage=950%>繁體中文
    <%@ codepage=65001%>UTF-8

    codepage指定了IIS按什么編碼讀取傳遞過來的串串(表單提交,地址欄傳遞等)。

    也指定了所有文本變量從Unicode轉換到的編碼,
    也就指定了從數據庫取出的數據從Unicode轉換到的編碼。(注意這個,很重要。)

    關鍵字:
    讀。阂粋串串,按簡體讀取是一些字,按繁體讀取是一些字,串串本身編碼沒有變。

    轉換:系統主動的轉換,比如從Unicode的“化”字到Big5的“化”字,內碼變成Big5的。如果Big5沒有對應的字,保留Unicode形式(&#xxxx;)

    簡體中文:化六個結論
    Unicode16進制形式:&#x5316;&#x516d;&#x4e2a;&#x7ED3;&#x8bba;
    Unicode10進制形式:&#21270;&#20845;&#20010;&#32467;&#35770;

    下面是我推測出來的編碼轉換的過程:
    客戶端:輸入法Unicode--輸入框unicode--從Unicode按charset轉換到對應編碼()--表單發送編碼

    服務器端:IIS解開表單編碼--按codepage指定編碼讀取--轉換到對應的Unicode--可以用request("")讀取了--進行一些處理--以Unicode編碼保存到數據庫

    服務器端:讀取數據庫的Unicode數據,轉換到codepage指定編碼---生成源代碼--IE按charset讀取顯示。

    下面舉例說明:
    例一:
    假設有三個asp頁面,典型的留言頁面:
    1.write.asp 簡單的輸入表單,提交到add.asp。
    <META http-equiv="Content-Type" content="text/html; charset=big5">
    2.add.asp 接收留言,保存到數據庫
    <%@ codepage=936%>
    3.read.asp 從數據庫取得留言,顯示。
    <%@ codepage=936%> charset=GB2312 或
    <%@ codepage=950%> charset=big5

    大家可以猜一猜,我在write.asp里用微軟拼音輸入法輸入“化六個討論”。最后在read.asp里會顯示什么樣?
    是不是暈了。讓我們從頭分析。

    例二:
    把例一的add.asp的<%@ codepage=936%>改為<%@ codepage=950%>,又會怎么樣呢?

    到這里發現了什么?
    1.如果輸入的文字和Charset對應的不同,一轉換,就可能出現Unicode形式的字了。這里就是原因所在。以后整個過程都保留著。
    2.Add.asp里codepage決定了保存到數據庫的文字,用的是哪個語言對應的Unicode.如codepage=936,
    那么數據庫保存的就是簡體中文的Unicode(數據庫拿回簡體中文系統,一切正常的),
    codepage=950保存的就是繁體中文的Unicode.(拿回簡體中文系統,就不對了)。

    3.注意一下串串的變化過程:

    1)輸入法---CharsetUnicode----指定字符集的映射
    2)Charset----表單編碼串串簡單編碼
    3)表單解碼上步的逆過程,兩步抵消了。
    4)串串à按codepage讀取串串沒變,這步有可能“誤會讀取”
    5)轉為對應的Unicode Codepage指定字符集----Unicode映射
    6)中間處理,進數據庫無變化,直接以Unicode形式進入
    7)按codepage讀取數據庫 Unicode----codepage指定字符集的映射
    8)顯示,按Charset指定字符集讀取串串沒變。

    以例一說明:

    例二:

    暈了,F在來用用知識。

    案例1。
    簡體中文系統下跑的好好的代碼,放到國外空間上,數據庫里亂碼,原有的數據也亂碼。
    分析:因為大多數人平時用的都是簡體中文系統,默認的codepage=936,所以平時大家不寫也沒有關系。
    但到了國外空間問題就出來了。從數據庫里的Unicode轉換到英文編碼去了,所以數據庫原有的簡體中文轉換到英文后,按GB顯示自然亂碼。
    如圖,新輸入的文字顯示正常,但數據庫里保存的是英文的Unicode的。
    解決方法:全部加上<%@codepage=936即可%>。
    全程只有簡體中文與對應Unicode間的轉換。

    案例二:
    簡體中文的代碼和數據,想轉為完全的繁體版,該怎么辦?
    分析:1。代碼文件編碼全部改為Big5的,文件本身保存編碼選繁體。
    2.<%@ codepage=936 %>
    3.Charset=big5
    4.access版本無所謂,因為access里的數據是Unicode的。
    5.好了,代碼可以在純繁體系統下跑了。
    6.遺留問題:原有的簡體中文數據讀出會有一些問號。效果同例一的950讀取,big5顯示。因為從簡體中文的Unicode轉換到繁體中文了,有些字繁體中沒有,就會出問號。
    7.解決:用一個臨時asp頁,codepage=65001,讀出為簡體中文的Unicode,用一個Unicode->Big5的函數,轉為繁體中文,然后寫回數據庫,應該行了吧?

    兩個案例完全是我按照理論推導出來了,未經證實。
    有類似經歷的歡迎批評指正。

    論壇的相關討論:http://www.blueidea.com/bbs/NewsDetail.asp?id=1831362

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>