同一頁(yè)面引入多個(gè)JS文件的編碼問題 原來只是覺得IE解析HTML文件的時(shí)候,,需要知道其傳輸編碼,才能正確處理,而從來沒有在意過JavaScript文件的編碼問題,。結(jié)果今天發(fā)現(xiàn)同一頁(yè)面中的多個(gè)JavaScript文件如果保存編碼不同,也會(huì)有出錯(cuò)的問題。這個(gè)一般怎么會(huì)遇到呢?
原來寫的js文件,從來沒有關(guān)心過他們的編碼問題,??墒呛髞聿恢趺吹模l(fā)現(xiàn)一些單獨(dú)都好使得文件,,被同時(shí)引用到一個(gè)頁(yè)面中時(shí),,就錯(cuò)誤不斷,根本不能執(zhí)行,。Debug半天,,原來是文件編碼問題搞得鬼。 一般我們?cè)谥形腛S中保存文本文件,,默認(rèn)都是一GB2312編碼保存的,,比如VS.NET 2003,2005都是這樣??墒钱?dāng)我們?cè)谀_本代碼中寫有"?"這些符號(hào)后,,保存文件會(huì)提示讓你保存為Unicode格式。如果你不加理會(huì),,仍然保存為 GB2312,,那么下次打開這個(gè)文件你會(huì)發(fā)現(xiàn)"?"變成"?"@_@。這樣的字符還有一些,,比如在Windows中的高位ASCII字符,,它們的 Unicode定義就是一些比較怪異的字符,如果用GB2312強(qiáng)行存這些字符,,打開后會(huì)被兩兩合并為漢字或成為亂碼,。 回到我們腳本文件編碼的問題上來,如果我們?cè)谕粋€(gè)頁(yè)面中引用多個(gè)JavaScript文件,,而這些文件的保存編碼又不同(有GB2312有又 Unicode),,就可能出錯(cuò)。當(dāng)然不是總都出,,這也是最要命的,。由于對(duì)于7bit ASCII碼,不管什么編碼都是通用的,,也不會(huì)有解碼問題,,可是如果文件里包含了漢字,就有可能出錯(cuò)了。 比如,,GB2312保存的js文件: var str = '這是一個(gè)GB2312編碼文件,。';
var description = 'this file saved as GB2312 encoding.'; Unicode編碼保存的js文件: var strW = '這是一個(gè)Unicode編碼文件,。';
var descriptionW = 'this file saved as Unicode encoding.'; 而這兩個(gè)文件在下列引用中,不管怎么選擇IE編碼也是不能正確執(zhí)行結(jié)果:( <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字符,,不同編碼的文件引用到一個(gè)頁(yè)面不會(huì)有問題,。 |
|