如題,剛才看了幾篇大家的討論,忽然也想起要將自己最近研究的問題貼出來,凡是和JS中亂碼相關的問題都發到這裡把,大家一起研究。:)
場景一:write寫出來的內容是utf-8格式的,如果保存的write數據中有不是utf-8編碼的中文,對write嵌套倆次以上就會有亂碼。由於手頭沒有現成的文件,剛才臨時制作了一個,這是1.htm頁面的代碼:
復制代碼 代碼如下:<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language="JavaScript" src="1.js"></script>
</head>
<body onload=myjs(1)>
</body>
</html>
這是引用的1.js文件代碼,倆個文件均用簡體中文保存而不是utf-8
復制代碼 代碼如下://這是JS遞歸自寫過程中漢字亂碼的演示程序
//不光是中文內容不行,就連注釋如果是中文有時候也不行
//感覺JS一碰上中文就變得很不穩定=_='
//Dec. 29th 2005 created by shouhaimu(QQ:30836570)
function myjs(i)
{
var t="<html>\n";
t+="<head>\n";
t+="<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>\n";
t+="<script language='JavaScript' src='1.js'></script>\n";
t+="</head>\n";
t+="<body>\n";
t+="<input type=button onclick=myjs("+(i+1)+" value='這是演示程序,已經運行了"+i+"次!'>\n";
//上面這行如果改成下面這句就可以正常顯示,看來確實是JS對漢字的支持不夠好:
//t+="<input type=button onclick=myjs("+(i+1)+" value='This is my code,it has run "+i+" times!'>\n";
t+="</body>\n";
t+="</html>\n";
document.open();
document.write(t);
document.close();
} 運行第2次以上就會有亂碼。
場景二:通過XMLHTTP獲取文件後再輸出時,如果該文件包含中文信息並按gb編碼,顯示時中文信息會是亂碼。
js代碼如下:(注釋是發貼子時候加的,如果怕干擾可以去掉)
復制代碼 代碼如下:<SCRIPT language="JavaScript" type="text/JavaScript">
self.onerror=null;
var Http = new ActiveXObject("Microsoft.XMLHTTP";
Http.open("GET",URL,false); //URL是您需要獲取的頁面的網址
Http.send();
document.write(Http.responseText);
</SCRIPT>
後來用VBS解決,改成如下:
<SCRIPT language="VBScript" type="text/VBScript">
Function bytes2BSTR(vIn)
strReturn = ""
For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next
bytes2BSTR = strReturn
End Function
set Http = CreateObject("Microsoft.XMLHTTP"
Http.open "Get",URL,false //URL是您需要獲取的頁面的網址
Http.send ""
document.write(bytes2BSTR(Http.responseBody))
</SCRIPT> 注:上面的bytes2BSTR只能對responseBody操作阿,responseText操作就不能正常顯示阿,因為responseText是系統按默認編碼加工以後的東東了,是一堆亂碼,沒法處理。但是這樣倒是能讀簡體中文的文件了,但是讀utf-8又會出錯。
JS運行時漢字亂碼相關問題的討論(編輯中出現的問題請參考其他專題貼)
首先感謝斑竹得指教,這個頁面不錯,收藏了,具體內容研習中
http://sheneyan.com/test/testAjaxPost.htm
有些我也聽說過,也做過測試,關鍵還有三個疑團沒有解開:
一、即使是曾經正常顯示的頁面,如果用了後退或者讀取了一個非utf-8頁面以後也不能正常顯示了;
二、即使所有的防亂碼(當然重新編碼的除外)措施都采用了,並且用同一程序打開銅一個頁面,也不能保證每次出來的頁面都能穩定地顯示為中文;
三、遠程獲取數據提交表單的問題,如果目標網站用了編碼和解碼,那麼意味著如果顯示的正常了,提交的內容就成了亂碼,反之,亦然。於是不得不預先對所有獲取的內容重新編碼,這樣就離不開編碼程序,也就擺脫不了VBS得陰影=_='
剛才測試中還發現個問題
先前發的VBS重編碼函數,如果頁面太大,IE會掛掉,具體多大估計和緩存及內存大小有關系。總之,如果讓我對中文支持的程度排序得話JS<VBS<ASP<HTML,HTML都靜態了,當然最穩定,所以做動態頁,如果不是非得客戶端運行,強烈建議用ASP生成代碼。
斑竹給得頁面頁能打開了,我對Ajax和xml都還比較陌生,雖然有聽說,但一直沒有介入,可否簡單介紹下,如果論壇上不方便說,可以加我QQ,資料中有,謝謝了!