2012-08-03 66 views
7

我有一個網頁在我切換字符從ISO-8859-1設置爲UTF-8的工作。頁面頂端會顯示這樣的:單引號顯示在瀏覽器菱形問號(沒有數據庫或PHP)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>[title of site]</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

我只使用ASCII字符的頁面,因爲UTF-8編碼的超集ASCII,這應該是罰款。但是,文中的單引號顯示爲黑色鑽石包圍的問號。我已經驗證這些是ASCII單引號(不是直引號)。

我讀過很多網上描述的解決方案,涉及PHP,魔術引號,數據庫配置,等等。然而,這是不被任何程序呈現平坦的HTML頁面的問題。

此外,許多誰都有這個問題被告知要切換到UTF-8來解決這個問題。這正是我如何引入的問題。

請看http://mch.blackcatwebinc.com/src/events.html看到這個問題。

+0

這些詞怎樣在您的數據庫中出現? – deex 2012-08-03 04:01:09

+0

頁面的源代碼不**具有ASCII單引號。無論把文本改成其他東西,如果它們確實是原始源代碼中的ASCII單引號(我真誠地懷疑)。 – tripleee 2012-08-03 04:33:42

回答

5

ASCII中唯一的引號是單引號'(0x27或39)和雙引號「(0x22或33)。你有什麼是一個8位編碼引號145(0x91)和146 (0x92)稱爲CP1252;它是Windows的標準8位西歐編碼,如果你想要的是UTF-8,你需要將它轉換爲UTF-8,因爲它不是有效的UTF-8;有效的UTF-8使用127(0x7F)以上的字符多個字節,並分別在U + 2018和U + 2019處放置開盤報價和收盤報價。

+0

你們都是對的。我已經查看了vim中的文本,它'掩蓋了症狀' - 將它們作爲單引號顯示,因爲它將文件作爲CP1252讀取。我做了一個'set encoding = utf8'並保存了文件,單引號顯示爲<92> - 即引號爲它們的CP1252十六進制等值。當更改爲ASCII(UTF-8)單引號時,一切正常。我還需要將我的IDE CodeLobster設置爲以UTF-8格式保存所有文件。 – blackcatweb 2012-08-03 14:38:45

0

我你的標籤,我工作的網站上的一個之間看到的唯一區別是分號後的空間和UTF是小寫的夢想。嘗試大寫UTF。

+0

剛剛在本地嘗試過 - 沒有效果。那裏還有那些問號。 – blackcatweb 2012-08-03 03:38:18

+0

-1案例在這裏不重要。 – tripleee 2012-08-03 04:32:32

0

所有ASCII可打印字符都有其等效的HTML實體代碼。其中一些字符通常受到大多數常見操作系統字體的支持,其中一些字符被歸類爲符號,這些字符將我們帶入您的渲染問題。

什麼,你理應有存在關閉單引號,爲了得到它正確地打印您應該使用它的實體的代碼,或&#146;分別。 如果它原來是一個開單引號,那麼你應該使用&#145;代替。

請注意,這兩個 ASCII 字符(和some more)沒有HTML實體名稱,因此您需要選擇實體代碼變體。

+0

沒有像ASCII關閉單引號這樣的東西。只有128以下的字符是ASCII。 – prosfilaes 2012-08-03 05:15:12

+0

如果你有21世紀的名字,我會很樂意更新上面的答案。請不要說撇號。 – Xhezairi 2012-08-03 05:45:36

+3

這是一個收盤單引號。它可以用CP1252或Unicode或其他幾種字符編碼進行編碼。它不是ASCII。 – prosfilaes 2012-08-03 05:48:21

1

你的源代碼是保存在UTF-8但 Latin1的 CP1252,和那些引號簡單引號,但U + 2019 RIGHT單引號(在Latin1的編碼)。以UTF-8格式保存源文件,它會起作用。

+1

這不是拉丁語-1。它是Windows代碼頁1252.對於大多數用途,CP1252是Latin-1的超集,但它們仍然不相同。 – prosfilaes 2012-08-03 07:42:46

+0

好吧,無論它是什麼,它都不是UTF-8,即使它被聲明爲UTF-8。我只是將瀏覽器切換到Latin-1並正確顯示,這只是聲明的編碼的經典情況,而實際的編碼不是相同的。 – deceze 2012-08-03 08:08:58

+0

CP1252經常用於Latin-1,大多數瀏覽器將Latin-1視爲CP1252,而HTML5則強制他們使用。 – prosfilaes 2012-08-03 23:07:41

1

最簡單的修復方法是在meta標記中將UTF-8更改爲windows-1252。這是有效的,因爲服務器在Content-Type標頭中宣佈沒有編碼,所以瀏覽器和其他客戶端將使用meta標籤中指定的編碼。

Windows-1252名稱是8位Windows Latin-1編碼的首選MIME名稱,也稱爲cp1252和一些其他名稱(通常被錯誤地表示爲「ANSI」)。

正如@deceze所解釋的,數據的實際編碼是windows-1252,而不是UTF-8。您也可以通過在創作軟件中使用合適的命令保存文件,將實際編碼更改爲UTF-8。但真正重要的是聲明的編碼與真實編碼相匹配。

另一種可能性是對撇號使用「逃逸」,如&rsquo;。他們獨立於編碼工作,但他們使源代碼不易讀取。

+0

這對我有效,謝謝。 :) – InkHeart 2014-12-02 04:17:41