原來只是覺得IE解析HTML文件的時候,需要知道其傳輸編碼,才能正確處理,而從來沒有在意過JavaScript文件的編碼問題。結果今天發現同一頁面中的多個JavaScript文件如果保存編碼不同,也會有出錯的問題。這個一般怎么會遇到呢?
原來寫的js文件,從來沒有關心過他們的編碼問題。可是后來不知怎么的,發現一些單獨都好使得文件,被同時引用到一個頁面中時,就錯誤不斷,根本不能執行。Debug半天,原來是文件編碼問題搞得鬼。
一般我們在中文OS中保存文本文件,默認都是一GB2312編碼保存的,比如VS.NET 2003,2005都是這樣。可是當我們在腳本代碼中寫有"?"這些符號后,保存文件會提示讓你保存為Unicode格式。如果你不加理會,仍然保存為GB2312,那么下次打開這個文件你會發現"?"變成"?"@_@。這樣的字符還有一些,比如在Windows中的高位ASCII字符,它們的Unicode定義就是一些比較怪異的字符,如果用GB2312強行存這些字符,打開后會被兩兩合並為漢字或成為亂碼。
回到我們腳本文件編碼的問題上來,如果我們在同一個頁面中引用多個JavaScript文件,而這些文件的保存編碼又不同(有GB2312有又Unicode),就可能出錯。當然不是總都出,這也是最要命的。由於對於7bit ASCII碼,不管什么編碼都是通用的,也不會有解碼問題,可是如果文件里包含了漢字,就有可能出錯了。
比如,GB2312保存的js文件: var str = '這是一個GB2312編碼文件。';
var description = 'this file saved as GB2312 encoding.'; 可以在選擇編碼為GB2312的IE中正確的被引用。
var description = 'this file saved as GB2312 encoding.'; 可以在選擇編碼為GB2312的IE中正確的被引用。
Unicode編碼保存的js文件: var strW = '這是一個Unicode編碼文件。';
var descriptionW = 'this file saved as Unicode encoding.'; 可以在選擇編碼為Unicode的IE中正確的被引用。
var descriptionW = 'this file saved as Unicode encoding.'; 可以在選擇編碼為Unicode的IE中正確的被引用。
而這兩個文件在下列引用中,不管怎么選擇IE編碼也是不能正確執行結果:( <html>
<head>
<title>Test Encode</title>
<script src="Unicode.js" language="javascript"></script>
<script src="GB2312.js" language="javascript"></script>
</head>
<body>
<script language="javascript">
alert(strW + '\r\n' + descriptionW);
alert(str + '\r\n' + description);
</script>
</body>
</html>
不過如果js中只有低位ASCII字符,不同編碼的文件引用到一個頁面不會有問題。
<head>
<title>Test Encode</title>
<script src="Unicode.js" language="javascript"></script>
<script src="GB2312.js" language="javascript"></script>
</head>
<body>
<script language="javascript">
alert(strW + '\r\n' + descriptionW);
alert(str + '\r\n' + description);
</script>
</body>
</html>
不過如果js中只有低位ASCII字符,不同編碼的文件引用到一個頁面不會有問題。
測試文件下載
posted on 2005-03-23 12:36 birdshome 閱讀(2310) 評論(11) 編輯 收藏 引用 收藏至365Key 所屬分類: Jscript&Dhtml開發
評論
# re: 同一頁面引入多個JS文件的編碼問題 回復
還要和aspx的頁面編碼相同,現在aspx頁面一般都采用utf8編碼,所以js引入時經常會出錯。實際只要保證編碼一樣就可以了。將所有的文件都存成utf-8的,基本就不會有問題了。
看來你現在專門研究js了。
2005-03-23 14:23 | ocean
# re: 同一頁面引入多個JS文件的編碼問題 回復
我現在一般都是把js文件改成.aspx后綴來調用了,這樣就不會再出現編碼的問題,之前被這個問題折騰了好長一段時間,現在終於算是好了。
2005-03-23 15:45 | bobo
# re: 同一頁面引入多個JS文件的編碼問題 回復
web.config
<globalization
requestEncoding="utf-8"
responseEncoding="utf-8"
/>
gb2312
gb2312
2005-03-23 15:50 | Microshaoft
# re: 同一頁面引入多個JS文件的編碼問題 回復
類似的問題我也遇到過,里面有中文注釋就出錯!
於是乎我把注釋都刪除了!~
2005-03-23 16:18 | Boler
# re: 同一頁面引入多個JS文件的編碼問題 回復
這個問題我前不久實施項目的時候碰到過。還好知道怎么解決(一陣搗鼓,到處設編碼。。。)。
2005-03-23 16:18 | Boler
# re: 同一頁面引入多個JS文件的編碼問題 回復
這個問題我前不久實施項目的時候碰到過。還好知道怎么解決(一陣搗鼓,到處設編碼。。。)。
現在有個習慣是基本上獨立的 js 文件里不寫中文。
2005-03-23 18:52 | 木野狐
# re: 同一頁面引入多個JS文件的編碼問題 回復
你可以把所有的單獨的js文件都用記事本打開,然后選擇另存為,編碼使用utf-8保存就能和aspx一起正常使用了
2005-03-24 09:26 | srz
# re: 同一頁面引入多個JS文件的編碼問題 回復
把@寫成 asc 碼 @#169。
2005-03-23 18:52 | 木野狐
# re: 同一頁面引入多個JS文件的編碼問題 回復
你可以把所有的單獨的js文件都用記事本打開,然后選擇另存為,編碼使用utf-8保存就能和aspx一起正常使用了
2005-03-24 09:26 | srz
# re: 同一頁面引入多個JS文件的編碼問題 回復
把@寫成 asc 碼 @#169。
gb2312的處理還好辦,utf-8的處理很麻煩的。
2005-03-24 14:11 | GirlSpicy
# re: 同一頁面引入多個JS文件的編碼問題 回復
如果你使用服務器端的程序也好辦,可以使用寬字節轉換。
2005-03-24 14:16 | GirlSpicy
# re: 同一頁面引入多個JS文件的編碼問題 回復
hammer!~~這個問題上次我們一起做項目的時候不就已經知道了嗎?怎么這么不長記性~~~~~
2005-04-08 12:53 | workingbird
# re: 同一頁面引入多個JS文件的編碼問題 回復
我在日文下也碰到此問題,但是我把2個javascript文件都改成utf8還是錯,
上傳到2個服務器上,一個正常,另一個出錯,為什么呢?
2005-06-28 12:19 | mad8
# re: 同一頁面引入多個JS文件的編碼問題 回復
這問題我也曾經遭遇過,我的apsx頁面都是utf-8的,因為特定時間段訪問量巨大,服務器配置爛又要求即時,所以能省就省啊,凡事需要JS里要用到高位字符全部抽到一起,然后將所有僅含ASCII字符的文件保存為ASCII編碼格式,帶高位字符的保存為utf-8,另外還開啟壓縮放到緩存里去,總覺得有點BT,好摳門的說。