濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 網(wǎng)站開發(fā)防止中文亂碼需要了解的codepage的重要性小結(jié)

網(wǎng)站開發(fā)防止中文亂碼需要了解的codepage的重要性小結(jié)

熱門標(biāo)簽:外呼系統(tǒng)還用卡么 徐州人工智能電銷機(jī)器人好用嗎 騰訊地圖標(biāo)注商戶關(guān)閉 智能電銷機(jī)器人適用于哪些行業(yè) 長(zhǎng)沙防封電銷卡品牌 武漢營(yíng)銷電話機(jī)器人軟件 西寧公司外呼系統(tǒng)平臺(tái) 地圖標(biāo)注宅基地 地圖標(biāo)注服務(wù)哪家好

相關(guān)的題外話:

一、操作系統(tǒng)
window系統(tǒng)內(nèi)部都是unicode的。文件夾名,文件名等都是unicode的,任何語(yǔ)言系統(tǒng)下都能正常顯示。

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

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

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

五、Word
word里的繁簡(jiǎn)轉(zhuǎn)換,簡(jiǎn)體轉(zhuǎn)換到繁體后,內(nèi)碼仍是簡(jiǎn)體中文的,其實(shí)只是簡(jiǎn)體中的繁體字。

六、ASP內(nèi)部是Unicode的,所有文本都是Unicode存儲(chǔ)的。需要時(shí)轉(zhuǎn)換到指定字符集。

首先說下結(jié)論:
%@ codepage=936%>簡(jiǎn)體中文
%@ codepage=950%>繁體中文
%@ codepage=65001%>UTF-8

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

也指定了所有文本變量從Unicode轉(zhuǎn)換到的編碼,
也就指定了從數(shù)據(jù)庫(kù)取出的數(shù)據(jù)從Unicode轉(zhuǎn)換到的編碼。(注意這個(gè),很重要。)

關(guān)鍵字:
讀?。阂粋€(gè)串串,按簡(jiǎn)體讀取是一些字,按繁體讀取是一些字,串串本身編碼沒有變。

轉(zhuǎn)換:系統(tǒng)主動(dòng)的轉(zhuǎn)換,比如從Unicode的“化”字到Big5的“化”字,內(nèi)碼變成Big5的。如果Big5沒有對(duì)應(yīng)的字,保留Unicode形式(#xxxx;)

簡(jiǎn)體中文:化六個(gè)結(jié)論
Unicode16進(jìn)制形式:#x5316;#x516d;#x4e2a;#x7ED3;#x8bba;
Unicode10進(jìn)制形式:#21270;#20845;#20010;#32467;#35770;

下面是我推測(cè)出來的編碼轉(zhuǎn)換的過程:
客戶端:輸入法Unicode--輸入框unicode--從Unicode按charset轉(zhuǎn)換到對(duì)應(yīng)編碼()--表單發(fā)送編碼

服務(wù)器端:IIS解開表單編碼--按codepage指定編碼讀取--轉(zhuǎn)換到對(duì)應(yīng)的Unicode--可以用request("")讀取了--進(jìn)行一些處理--以Unicode編碼保存到數(shù)據(jù)庫(kù)

服務(wù)器端:讀取數(shù)據(jù)庫(kù)的Unicode數(shù)據(jù),轉(zhuǎn)換到codepage指定編碼---生成源代碼--IE按charset讀取顯示。

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

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

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

到這里發(fā)現(xiàn)了什么?
1.如果輸入的文字和Charset對(duì)應(yīng)的不同,一轉(zhuǎn)換,就可能出現(xiàn)Unicode形式的字了。這里就是原因所在。以后整個(gè)過程都保留著。
2.Add.asp里codepage決定了保存到數(shù)據(jù)庫(kù)的文字,用的是哪個(gè)語(yǔ)言對(duì)應(yīng)的Unicode.如codepage=936,
那么數(shù)據(jù)庫(kù)保存的就是簡(jiǎn)體中文的Unicode(數(shù)據(jù)庫(kù)拿回簡(jiǎn)體中文系統(tǒng),一切正常的),
codepage=950保存的就是繁體中文的Unicode.(拿回簡(jiǎn)體中文系統(tǒng),就不對(duì)了)。

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

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

以例一說明:

例二:

暈了?,F(xiàn)在來用用知識(shí)。

案例1。
簡(jiǎn)體中文系統(tǒng)下跑的好好的代碼,放到國(guó)外空間上,數(shù)據(jù)庫(kù)里亂碼,原有的數(shù)據(jù)也亂碼。
分析:因?yàn)榇蠖鄶?shù)人平時(shí)用的都是簡(jiǎn)體中文系統(tǒng),默認(rèn)的codepage=936,所以平時(shí)大家不寫也沒有關(guān)系。
但到了國(guó)外空間問題就出來了。從數(shù)據(jù)庫(kù)里的Unicode轉(zhuǎn)換到英文編碼去了,所以數(shù)據(jù)庫(kù)原有的簡(jiǎn)體中文轉(zhuǎn)換到英文后,按GB顯示自然亂碼。
如圖,新輸入的文字顯示正常,但數(shù)據(jù)庫(kù)里保存的是英文的Unicode的。
解決方法:全部加上%@codepage=936即可%>。
全程只有簡(jiǎn)體中文與對(duì)應(yīng)Unicode間的轉(zhuǎn)換。

案例二:
簡(jiǎn)體中文的代碼和數(shù)據(jù),想轉(zhuǎn)為完全的繁體版,該怎么辦?
分析:1。代碼文件編碼全部改為Big5的,文件本身保存編碼選繁體。
2.%@ codepage=936 %>
3.Charset=big5
4.access版本無所謂,因?yàn)閍ccess里的數(shù)據(jù)是Unicode的。
5.好了,代碼可以在純繁體系統(tǒng)下跑了。
6.遺留問題:原有的簡(jiǎn)體中文數(shù)據(jù)讀出會(huì)有一些問號(hào)。效果同例一的950讀取,big5顯示。因?yàn)閺暮?jiǎn)體中文的Unicode轉(zhuǎn)換到繁體中文了,有些字繁體中沒有,就會(huì)出問號(hào)。
7.解決:用一個(gè)臨時(shí)asp頁(yè),codepage=65001,讀出為簡(jiǎn)體中文的Unicode,用一個(gè)Unicode->Big5的函數(shù),轉(zhuǎn)為繁體中文,然后寫回?cái)?shù)據(jù)庫(kù),應(yīng)該行了吧?

兩個(gè)案例完全是我按照理論推導(dǎo)出來了,未經(jīng)證實(shí)。
有類似經(jīng)歷的歡迎批評(píng)指正。

您可能感興趣的文章:
  • ASP codepage 頁(yè)面編碼使用說明
  • CODEPAGE 列表與asp應(yīng)用例子
  • 頁(yè)面編碼codepage=936和65001的區(qū)別

標(biāo)簽:運(yùn)城 通遼 巴彥淖爾 普洱 鷹潭 通化 雅安 荊門

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《網(wǎng)站開發(fā)防止中文亂碼需要了解的codepage的重要性小結(jié)》,本文關(guān)鍵詞  網(wǎng)站開發(fā),防止,中文,亂碼,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《網(wǎng)站開發(fā)防止中文亂碼需要了解的codepage的重要性小結(jié)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于網(wǎng)站開發(fā)防止中文亂碼需要了解的codepage的重要性小結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    桑植县| 聊城市| 陆良县| 如东县| 沭阳县| 荆门市| 新野县| 揭西县| 双桥区| 田东县| 海阳市| 天峻县| 福建省| 宣汉县| 正定县| 巴彦淖尔市| 中西区| 庐江县| 衡南县| 保定市| 合川市| 梁平县| 昭通市| 深泽县| 隆尧县| 山阴县| 高阳县| 思茅市| 新泰市| 龙泉市| 贺兰县| 揭西县| 深州市| 攀枝花市| 名山县| 江都市| 宜都市| 宁晋县| 临颍县| 和政县| 光山县|