簡體   English   中英

從 Javascript 動態加載字符集 UTF-8 和 ISO-8859-1

[英]Dynamically load the charset UTF-8 and ISO-8859-1 from Javascript

我嘗試使用字符集UTF-8來顯示ä ,它顯示了一些方框。

我還嘗試使用字符集ISO-8859-1來顯示ä ,它顯示為ä (哪個是正確的)

但是當在javascript條件下結合上述兩個字符集時,它不能正常工作。 參考下面的代碼,

 <html>
    <head>
        <script type="text/javascript">
            var lang = 'German';
            function f(){           
                if(lang != 'SomeOtherLanguage'){
                   //here code will execute. And page should display square box. Instead of square box, ä is displayed. Which is wrong. I cant able to find reason.
                    metaTag = '<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>';                
                }
                else
                    metaTag = '<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>';                   

                document.getElementsByTagName('head')[0].innerHTML += metaTag;
            }           
        </script>
    </head>
    <body onload="f()">
        <h1>Latin letter :  ä </h1> <br />  
    </body>
</html>

你不能,字符集是由解析器建立的,解析器需要解析 Javascript 才能生成元 DOM。

您仍然可以僅使用一種字符集並轉換數據。

你試圖做的事情永遠不會奏效。

如果您的 HTML 的原始字節開始時未編碼為 UTF-8,則您不能在<meta>標記或 HTTP Content-Type標頭中聲明 UTF-8。 你會對瀏覽器/客戶端撒謊,這就是為什么你會得到糟糕的結果。

如果您的 HTML 實際編碼為 ISO-8859-1,則您的代碼僅在<meta>標簽聲明 ISO-8859-1(並且沒有Content-Type標頭來覆蓋它)時才會“工作”。 在包括 ISO-8859-1 在內的幾個(但不是全部)ISO-8859-X 字符0xE4ä被編碼為字節0xE4 ,因此如果字節0x34存在於HTML 的原始數據。

在 UTF-8 中, ä被編碼為字節0xC3 0xA4 如果您的 HTML 包含字節0xE4 ,但您聲明為 UTF-8,則會得到不好的結果( 0xE4不是 UTF-8 中的有效字節)。

因此,您的<meta>標記(和 HTTP Content-Type標頭)需要聲明一個實際上與 HTML 原始字節的真實編碼相匹配的字符集。

如果您的 HTTP 服務器正在提供靜態 HTML 文件,則在將 HTML 保存到文件時,該文件會以特定字符集進行編碼。 需要在<meta>標記中靜態指定相同的字符集(最好也在 HTTP Content-Type標頭中)。 如果您的 HTTP 服務器動態生成 HTML,則需要將 HTML 編碼為特定字符集以進行傳輸,因此需要在生成的<meta>標記(和Content-Type標頭)中指定相同的字符集。

換句話說,不要再試圖欺騙瀏覽器/客戶端。 說實話,以后就不會再遇到這個問題了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM