相關的題外話:
一、操作系統
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進制形式:化六个结论
Unicode10進制形式:化六个结论
下面是我推測出來的編碼轉換的過程:
客戶端:輸入法Unicode--輸入框unicode--從Unicode按charset轉換到對應編碼()--表單發送編碼
服務器端:IIS解開表單編碼--按codepage指定編碼讀取--轉換到對應的Unicode--可以用request("")讀取了--進行一些處理--以Unicode編碼保存到數據庫
服務器端:讀取數據庫的Unicode數據,轉換到codepage指定編碼---生成源代碼--IE按charset讀取顯示。
下面舉例說明:
例一:
假設有三個ASP頁面,典型的留言頁面:
1.
文件保存編碼和codepage之間的關系
結論:
codepage指定了IIS按什麼編碼讀取源文件。如果codepage和源文件的實際編碼相同,則讀取正確,否則就會亂碼。有時還會報編譯錯誤,大概意思是無效字符吧。
題外話:
1.一個文件保存格式為GB2312,那麼你在編輯的時候,不論是用輸入法輸入的,還是copy粘貼的,所有的字都會轉為GB2312編碼。
2.象Mid,Left,Chr,Instr等函數都是面向Unicode形式變量的,他們的入口和出口參數都是unicode形式的,也就是說,進入時從Unicode轉為對應編碼,出來時轉回Unicode。
試驗過程:
假設文件a.ASP,保存編碼格式為GB2312,輸入:帳票マッ(日文輸入法輸入),自動變為GB2312編碼的,但因為GB2312字庫中有日文,所以顯示正常。
上面四個字如果按日文Shift-JIS編碼查看,則是: