asp 讓你知道codepage的重要

2021-04-12 12:45:58 字數 3648 閱讀 1467

這幾天研究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形式(&#***x;)

簡體中文:化六個結論

unicode16進製制形式:化六個結論

unicode10進製形式:化六個結論

下面是我推測出來的編碼轉換的過程:

客戶端:輸入法unicode--輸入框unicode--從unicode按charset轉換到對應編碼()--表單傳送編碼

伺服器端:iis解開表單編碼--按codepage指定編碼讀取--轉換到對應的unicode--可以用request("")讀取了--進行一些處理--以unicode編碼儲存到資料庫

伺服器端:讀取資料庫的unicode資料,轉換到codepage指定編碼---生成源**--ie按charset讀取顯示。

大家可以猜一猜,我在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指定字符集讀取串串沒變。

以例一說明:

例二:暈了。現在來用用知識。

案例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

codepage簡介

字元內碼(charcter code)指的是用來代表字元的內碼.讀者在輸入和儲存文件時都要使用內碼,內碼分為

codepage指的是乙個經過挑選的以特定順序排列的字元內碼列表,對於早期的單位元組內碼的語種,codepage中的內碼順序使得系統可以按照此列表來根據鍵盤的輸入值給出乙個對應的內碼.對於雙位元組內碼,則給出的是multibyte到unicode的對應表,這樣就可以把以unicode形式存放的字元轉化為相應的字元內碼,或者反之,在linux核心中對應的函式就是utf8_mbtowc和utf8_wctomb.

在2023年前,仍然沒有任何國際標準如iso-8859或unicode來定義如何擴充套件us-ascii編碼以便非英語國家的使用者使用.很多it 廠商發明了他們自己的編碼,並且使用了難以記憶的數目來標識:

例如936代表簡體中文. 950代表正體中文.

同 extended unix coding ( euc )編碼大不一樣的是,下面所有的遠東 codepage 都利用了c1控制碼 做為首位元組, 使用ascii值 ' | awk 'begin' | awk ''

5.3 uni2big5.pl

5.4 uni2gbk.pl

5.5 轉換codepage的工具

asp 讓你知道codepage的重要

這幾天研究utf 8編碼,太暈了,把我的看法和各位討論討論。歡迎來批啊。以下都是我的想法,有不對的請不吝賜教,幫忙指出來。一 作業系統 window系統內部都是unicode的。資料夾名,檔名等都是unicode的,任何語言系統下都能正常顯示。二 輸入法 微軟拼音輸出的是unicode的,智慧型ab...

找工作秘笈 「讓別人知道你知道」

乙個故事 在2008年的時候,我們準備招聘一名應屆的本科生做諮詢助理。收到數百封簡歷經過篩選後找出來三個比較合適的人。但我們也拿不準具體要哪乙個,對於新畢業的學生其實我們並沒有奢望他的專業能力有多高,但我們需要找哪些積極主動,能夠思考問題從而成長比較快的人,這樣的人培養起來也比較有成效。但這三個人綜...

ASP中有以下一些CodePage型別

codepage 936 簡體中文 codepage 950 正體中文 codepage 65001 utf 8 如果網頁採用utf 8編碼,在使用sqlserver資料庫的時候,需要在資料庫鏈結頁面指定codepage型別 codepage 65001 有文章指出需要在sqlserver中選擇nc...