網(wǎng)頁(yè)語(yǔ)言編碼及asp亂碼問(wèn)題解決方案
更新時(shí)間:2007年05月11日 00:00:00 作者:
最近公司有一個(gè)日文項(xiàng)目,由于之前使用的是自己開發(fā)的中文CMS,并沒(méi)有將語(yǔ)言包分離,在網(wǎng)站建設(shè)調(diào)試過(guò)程中出現(xiàn)了令人頭疼的亂碼問(wèn)題。
亂碼出現(xiàn)的原因
由于各個(gè)字符編碼的儲(chǔ)存空間不一樣,所以當(dāng)使用不同的字符讀取數(shù)據(jù)時(shí),當(dāng)字符空間過(guò)小,就不能正常顯示了。
比如說(shuō)中文字符的字符集一般是gb2312,如果用utf-8強(qiáng)制讀取改變gb2312的字符,就有可能出現(xiàn)亂碼。因?yàn)閡tf-8的字符集儲(chǔ)存空間大于gb2312,當(dāng)使用utf-8讀取時(shí),有些字符gb2312的編碼中是不存在的,不存在的字符自然會(huì)出現(xiàn)亂碼了。對(duì)于靜態(tài)文件來(lái)說(shuō),如果文件的儲(chǔ)存編碼和網(wǎng)頁(yè)中編碼設(shè)置(charset)不一致的話,由于以上原因就會(huì)出現(xiàn)亂碼問(wèn)題。
以上是對(duì)于亂碼問(wèn)題的簡(jiǎn)單分析,在解決現(xiàn)有問(wèn)題時(shí)有涉及到了asp對(duì)國(guó)際化的支持。
涉及到三個(gè)函數(shù): @CODEPAGE,Response.CodePage,Session.CodePage
下面是MSDN中的一段話。
Setting @CODEPAGE explicitly affects literal strings in a single response. Response.CodePage affects dynamic strings in a single response, and Session.CodePage affects dynamic strings in all responses in a session.
這三個(gè)函數(shù)都可以設(shè)置asp的編碼,其中 @CODEPAGE 相當(dāng)于php中的header,必須在文檔的開始發(fā)出。
在中文操作系統(tǒng)的IIS中,默認(rèn)的為gb2312,參數(shù)值是:”936″,而日文需要指定文檔CODEPAGE :
<%@ CODEPAGE=932 %>
我們使用這個(gè)函數(shù)來(lái)設(shè)置文檔編碼具體的使用方法可以參考:http://www.cloudward.net/techLife/article.asp?id=490
現(xiàn)在應(yīng)該沒(méi)有問(wèn)題了吧?哇,問(wèn)題仍然存在??紤]到SEO公司的asp程序全部需要生成靜態(tài)頁(yè)面。而生成的頁(yè)面全部是windows默認(rèn)的ANSI,其中包含日文字符仍然會(huì)出現(xiàn)亂碼。這樣我們需要一個(gè)asp的函數(shù),生成utf-8或者日文編碼的文件。 我們使用以下代碼完成:
Set objStream = Server.CreateObject(”ADODB.Stream”)
With objStream
.Open
.Charset = “utf-8″ //編碼,這里你可以改成任何編碼
.Position = objStream.Size
.WriteText=pencat //pencat 為寫入的數(shù)據(jù)
.SaveToFile server.mappath(”patch/flilename.html”),2 //生成文件路徑
.Close
End With
Set objStream = Nothing
經(jīng)測(cè)試后亂碼的問(wèn)題解決。
亂碼出現(xiàn)的原因
由于各個(gè)字符編碼的儲(chǔ)存空間不一樣,所以當(dāng)使用不同的字符讀取數(shù)據(jù)時(shí),當(dāng)字符空間過(guò)小,就不能正常顯示了。
比如說(shuō)中文字符的字符集一般是gb2312,如果用utf-8強(qiáng)制讀取改變gb2312的字符,就有可能出現(xiàn)亂碼。因?yàn)閡tf-8的字符集儲(chǔ)存空間大于gb2312,當(dāng)使用utf-8讀取時(shí),有些字符gb2312的編碼中是不存在的,不存在的字符自然會(huì)出現(xiàn)亂碼了。對(duì)于靜態(tài)文件來(lái)說(shuō),如果文件的儲(chǔ)存編碼和網(wǎng)頁(yè)中編碼設(shè)置(charset)不一致的話,由于以上原因就會(huì)出現(xiàn)亂碼問(wèn)題。
以上是對(duì)于亂碼問(wèn)題的簡(jiǎn)單分析,在解決現(xiàn)有問(wèn)題時(shí)有涉及到了asp對(duì)國(guó)際化的支持。
涉及到三個(gè)函數(shù): @CODEPAGE,Response.CodePage,Session.CodePage
下面是MSDN中的一段話。
Setting @CODEPAGE explicitly affects literal strings in a single response. Response.CodePage affects dynamic strings in a single response, and Session.CodePage affects dynamic strings in all responses in a session.
這三個(gè)函數(shù)都可以設(shè)置asp的編碼,其中 @CODEPAGE 相當(dāng)于php中的header,必須在文檔的開始發(fā)出。
在中文操作系統(tǒng)的IIS中,默認(rèn)的為gb2312,參數(shù)值是:”936″,而日文需要指定文檔CODEPAGE :
<%@ CODEPAGE=932 %>
我們使用這個(gè)函數(shù)來(lái)設(shè)置文檔編碼具體的使用方法可以參考:http://www.cloudward.net/techLife/article.asp?id=490
現(xiàn)在應(yīng)該沒(méi)有問(wèn)題了吧?哇,問(wèn)題仍然存在??紤]到SEO公司的asp程序全部需要生成靜態(tài)頁(yè)面。而生成的頁(yè)面全部是windows默認(rèn)的ANSI,其中包含日文字符仍然會(huì)出現(xiàn)亂碼。這樣我們需要一個(gè)asp的函數(shù),生成utf-8或者日文編碼的文件。 我們使用以下代碼完成:
Set objStream = Server.CreateObject(”ADODB.Stream”)
With objStream
.Open
.Charset = “utf-8″ //編碼,這里你可以改成任何編碼
.Position = objStream.Size
.WriteText=pencat //pencat 為寫入的數(shù)據(jù)
.SaveToFile server.mappath(”patch/flilename.html”),2 //生成文件路徑
.Close
End With
Set objStream = Nothing
經(jīng)測(cè)試后亂碼的問(wèn)題解決。
您可能感興趣的文章:
- php 判斷網(wǎng)頁(yè)是否是utf8編碼的方法
- js 顯示base64編碼的二進(jìn)制流網(wǎng)頁(yè)圖片
- Base64編碼加密JS代碼網(wǎng)頁(yè)版
- 多種語(yǔ)言(big5\gbk\gb2312\utf8\Shift_JIS\iso8859-1)的網(wǎng)頁(yè)編碼切換解決方案歸納
- ASP+FSO生成的網(wǎng)頁(yè)文件默認(rèn)編碼格式以及轉(zhuǎn)換成UTF-8編碼方法
- ASP UTF-8編碼生成靜態(tài)網(wǎng)頁(yè)的函數(shù)
- asp.net HttpWebRequest自動(dòng)識(shí)別網(wǎng)頁(yè)編碼
- asp.net 網(wǎng)頁(yè)編碼自動(dòng)識(shí)別代碼
- vbs或asp采集文章時(shí)網(wǎng)頁(yè)編碼問(wèn)題
- 判斷網(wǎng)頁(yè)編碼的方法python版
相關(guān)文章
ASP生成隨機(jī)字符串(數(shù)字+大小寫字母)的代碼
ASP生成隨機(jī)字符串(數(shù)字+大小寫字母)的代碼...2007-10-10asp下將數(shù)據(jù)庫(kù)中的信息存儲(chǔ)至XML文件中
asp下將數(shù)據(jù)庫(kù)中的信息存儲(chǔ)至XML文件中...2007-04-04ASP生成隨機(jī)數(shù) ASP生成不重復(fù)隨機(jī)數(shù)
這篇文章主要介紹了ASP生成不重復(fù)隨機(jī)數(shù)的方法,需要的朋友可以參考下2014-05-05響應(yīng)對(duì)象 錯(cuò)誤 ''ASP 0185 : 80020003'' 缺少默認(rèn)屬性
發(fā)現(xiàn)個(gè)垃圾后臺(tái)用了大量的Response.Cookies,導(dǎo)致后臺(tái)認(rèn)證出錯(cuò)。2007-12-12asp中格式化HTML函數(shù)代碼 SDCMS加強(qiáng)版
主要用來(lái)去除html中的script,iframe等html標(biāo)記,需要的朋友可以參考下。2011-01-01ASP中實(shí)現(xiàn)執(zhí)行定時(shí)任務(wù)的方法
這篇文章主要介紹了ASP中實(shí)現(xiàn)執(zhí)行定時(shí)任務(wù)的方法,本文使用WSH (Windows Scripting Host) 的實(shí)現(xiàn)定時(shí)任務(wù),需要的朋友可以參考下2014-07-07解決使用良精企業(yè)建站7.0未注冊(cè)問(wèn)題
解決使用良精企業(yè)建站7.0未注冊(cè)問(wèn)題...2007-04-04