Asp-Classic

經典 ASP 文本替換和 UTF-8 編碼

  • April 27, 2019

我們有一個使用經典 ASP 的網站。

我們發布過程的一部分會替換文件中的值,我們在其中發現了一個錯誤,它將文件以 UTF-8 格式寫出。

然後這會導致我們的應用程序開始吐出垃圾。撇號作為一些編碼字元返回。

如果我們然後刪除表明該文件為 UTF-8 的 BOM,則之前呈現為垃圾的文本現在可以正確顯示。

IIS 在遇到 UTF-8 文件時有什麼不同嗎?

UTF-8 不使用 BOM;在某些 Microsoft 軟體中,這是一個令人討厭的錯誤功能,將它們放在那裡。您需要找到發布過程的哪個步驟將 UTF-8 編碼的 BOM 放入文件中並修復它——即使您使用的是 UTF-8,您也應該停止它*,*這確實是當今最好的。

但我懷疑是 IIS 導致了顯示問題。瀏覽器更有可能猜測最終顯示頁面的字元集,當它看到看起來像是 UTF-8 編碼的字節時,它會猜測整個頁面是 UTF-8。您應該能夠通過使用 HTTP 標頭聲明明確的字元集來阻止它:

Content-Type: text/html;charset=iso-8859-1

和/或 HTML 中的元元素

<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />

現在(假設 ISO-8859-1 實際上是您的數據所在的字元集)它應該顯示 OK。但是,如果您的文件在開始時確實有一個 UTF-8 編碼的 BOM,那麼您現在會在頁面中看到它為 ‘’,這就是這些字節在 ISO-8859-1 中的樣子。所以你仍然需要擺脫那個misBOM。

我昨天正在搜尋相同的確切問題並遇到:

<http://blog.inspired.no/utf-8-with-asp-71/>

該頁面的重要部分,以防它消失……

ASP 程式碼:

Response.ContentType = "text/html"
Response.AddHeader "Content-Type", "text/html;charset=UTF-8"
Response.CodePage = 65001
Response.CharSet = "UTF-8"

和以下 HTML META 標記:

&lt;meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /&gt;

我們正在使用元標記和 asp CharSet 屬性,但頁面仍然沒有正確呈現。將其他三行添加到 asp 文件後,一切正常。

希望這可以幫助!

引用自:https://stackoverflow.com/questions/1453864