’
顯示在我的頁面上而不是'
。」「」在頁面上顯示而不是「」「
我有Content-Type
設置爲我的兩個<head>
標籤UTF-8
和我的HTTP頭:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
另外,我的瀏覽器設置爲Unicode (UTF-8)
:
那麼這有什麼問題,我該如何解決?
’
顯示在我的頁面上而不是'
。」「」在頁面上顯示而不是「」「
我有Content-Type
設置爲我的兩個<head>
標籤UTF-8
和我的HTTP頭:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
另外,我的瀏覽器設置爲Unicode (UTF-8)
:
那麼這有什麼問題,我該如何解決?
確保瀏覽器和編輯器使用UTF-8編碼,而不是ISO-8859-1/Windows-1252。
或使用’
。
如果您的內容類型已經是UTF8,那麼很可能數據已經到達錯誤的編碼。如果您從數據庫獲取數據,請確保數據庫連接使用UTF-8。
如果這是來自文件的數據,請確保該文件正確編碼爲UTF-8。您通常可以在您選擇的編輯器的「另存爲...」對話框中進行設置。
如果在源文件中查看數據時數據已經損壞,那麼很可能它曾經是一個UTF-8文件,但在一路上被保存在錯誤的編碼中。
那麼,有什麼問題,
這是一個’
(RIGHT SINGLE QUOTATION MARK
- U + 2019)進行了編碼爲CP-1252而不是UTF-8字符。如果您檢查encodings表,那麼您會看到該字符是由字節0xE2
,0x80
和0x99
組成的UTF-8。如果您檢查CP-1252 code page layout,那麼您會看到每個字節代表單個字符â
,€
和™
。
,我該如何解決?
使用UTF-8而不是CP-1252來讀取,寫入,存儲和顯示字符。
我的Content-Type在我的兩個
<head>
標籤設置爲UTF-8和我的HTTP頭:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
這僅指示客戶端用來解釋其編碼並顯示字符。這並不指示您自己的程序使用哪種編碼來讀取,寫入,存儲和顯示字符。確切答案取決於所使用的服務器端平臺/數據庫/編程語言。請注意,在HTTP響應頭中設置的優先級高於HTML元標記。 HTML元標記只能在從本地磁盤文件系統而不是HTTP打開頁面時使用。
另外,我的瀏覽器設置爲
Unicode (UTF-8)
:
這隻強制客戶端用來解釋和顯示的字符,編碼。但實際的問題是,您已經將’
(以UTF-8編碼)發送給客戶端,而不是’
。客戶端正在使用UTF-8編碼正確顯示’
。如果客戶被錯誤地使用,例如ISO-8859-1,您可能會看到ââ¬â¢
。
我使用ASP.NET 2.0中使用的數據庫。
這很可能是您的問題所在。您需要使用獨立的數據庫工具驗證數據的外觀。
如果’
字符在那裏,那麼您沒有正確連接到數據庫。您需要告訴數據庫連接器使用UTF-8。
如果你的數據庫包含’
,那麼它就是你的數據庫搞砸了。很可能這些表格未配置爲使用UTF-8
。相反,他們使用數據庫的默認編碼,這取決於配置。如果這是你的問題,那麼通常只是改變表使用UTF-8就足夠了。如果你的數據庫不支持,你需要重新創建表。創建表格時,最好設置表格的編碼。
你最有可能使用SQL Server,但這裏是一些MySQL的代碼(從this article複製):
CREATE DATABASE db_name CHARACTER SET utf8;
CREATE TABLE tbl_name (...) CHARACTER SET utf8;
如果你的表格是已經但是UTF-8,那麼你需要退後一步。 誰在或什麼把數據放在那裏。 這就是問題所在。一個例子是HTML表單提交的值被錯誤地編碼/解碼。
這裏有一些更多的聯繫,以瞭解更多有關該問題:
您的字符編碼有不匹配;你的字符串被編碼爲一種編碼(UTF-8),無論是解釋這個頁面是使用另一種(如ASCII)。
總是在你的http頭文件中指定你的編碼,並確保它符合你的框架的編碼定義。
樣品HTTP標頭:
Content-Type text/html; charset=utf-8
<configuration>
<system.web>
<globalization
fileEncoding="utf-8"
requestEncoding="utf-8"
responseEncoding="utf-8"
culture="en-US"
uiCulture="de-DE"
/>
</system.web>
</configuration>
同樣的事情發生在我身上用 ' - ' 字符(長減號)。
我用這個簡單的更換,從而解決這個問題:
htmlText = htmlText.Replace('–', '-');
OP的問題是mojibake,而不是類似的Unicode字符。 – 2013-12-28 07:04:14
我有一些文件,其中…
被顯示爲…
和ê
被顯示爲ê
。這是如何到達那裏(Python代碼):
# Adam edits original file using windows-1252
windows = '\x85\xea'
# that is HORIZONTAL ELLIPSIS, LATIN SMALL LETTER E WITH CIRCUMFLEX
# Beth reads it correctly as windows-1252 and writes it as utf-8
utf8 = windows.decode("windows-1252").encode("utf-8")
print(utf8)
# Charlie reads it *incorrectly* as windows-1252 writes a twingled utf-8 version
twingled = utf8.decode("windows-1252").encode("utf-8")
print(twingled)
# detwingle by reading as utf-8 and writing as windows-1252 (it's really utf-8)
detwingled = twingled.decode("utf-8").encode("windows-1252")
assert utf8==detwingled
要解決這個問題,我用Python代碼是這樣的:
with open("dirty.html","rb") as f:
dt = f.read()
ct = dt.decode("utf8").encode("windows-1252")
with open("clean.html","wb") as g:
g.write(ct)
(因爲有人插入twingled版本爲正確的UTF- 8號文件,實際上我只提取twingled部分,detwingle它和我用BeautifulSoup此將其插回。)
這是更有可能的是,你在內容創作有查理比Web服務器配置錯誤。您還可以通過爲utf-8文檔選擇windows-1252編碼來強制您的Web瀏覽器混淆頁面。您的網絡瀏覽器不能排除查理保存的文檔。
注意:使用任何其他單字節代碼頁(例如latin-1)而不是windows-1252可能會發生同樣的問題。
這是關於如何發生的最好解釋 – 2016-06-29 16:15:24
取而代之的是我用過的磅牌:&磅;沒有空間。這爲我解決了這個問題。
歐元:&歐元;沒有空間。
’
(統一代碼點U+2019 RIGHT SINGLE QUOTATION MARK
)以UTF-8編碼爲字節:
0xE2 0x80 0x99
。
’
(Unicode代碼點U+00E2 U+20AC U+2122
)以UTF-8編碼爲字節:
0xC3 0xA2
0xE2 0x82 0xAC
0xE2 0x84 0xA2
。
這些是您的瀏覽器實際接收的字節數,以UTF-8處理時生成’
。
這意味着,源數據被髮送到瀏覽器之前通過2個字符集轉換打算:
源’
字符(U+2019
)首先編碼爲UTF-8字節:
0xE2 0x80 0x99
那些單個字節然後是錯誤解釋並解碼爲Unicode由Windows的125X字符集的一個(1252,1254,1256,和1258的所有地圖0xE2 0x80 0x99
到U+00E2 U+20AC U+2122
)碼點U+00E2 U+20AC U+2122
,然後將這些碼點被編碼爲UTF-8字節:
0xE2
- >U+00E2
- >0xC3 0xA2
0x80
- >U+20AC
- >0xE2 0x82 0xAC
0x99
- >U+2122
- >0xE2 0x84 0xA2
您需要找到正在執行步驟2中額外轉換的位置並將其刪除。
對我來說,最有用的答案自然是來自Pascal專家! – Slashback 2017-12-02 17:30:50
您必須從Word文檔複製/粘貼文本。 Word文檔使用智能引號。你可以用特殊字符(& rsquo;)替換它,或者直接輸入你的HTML編輯器(')。
我相信這會解決您的問題。
如果有人得到WordPress的網站這個錯誤,您需要更改WP-配置數據庫字符集:代替
define('DB_CHARSET', 'utf8mb4_unicode_ci');
:
define('DB_CHARSET', 'utf8mb4');
當一個字符串轉換而來這有時會發生Windows-1252到UTF-8 兩次。
我們在Zend/PHP/MySQL應用程序中看到類似這樣的字符出現在數據庫中,這可能是由於MySQL連接沒有指定正確的字符集。我們必須:
確保Zend公司和PHP用UTF-8格式的數據庫進行通信(是不是通過默認)
修復損壞的字符,像這樣幾個SQL查詢...
UPDATE MyTable SET
MyField1 = CONVERT(CAST(CONVERT(MyField1 USING latin1) AS BINARY) USING utf8),
MyField2 = CONVERT(CAST(CONVERT(MyField2 USING latin1) AS BINARY) USING utf8);
根據需要對此進行儘可能多的表/列操作。
如果需要,您還可以在PHP中修復其中一些字符串。請注意,由於字符編碼爲兩次,我們實際上需要做一個反向轉換從 UTF-8回到Windows-1252,這首先使我感到困惑。
mb_convert_encoding('’', 'Windows-1252', 'UTF-8'); // returns ’
「或者使用’」。問題解決了。 – 2010-03-19 13:48:19
不,它沒有解決。在您的應用程序中,字符編碼仍然存在不一致。您將來會重新遇到其他非CP1252字符的相同問題。其中有相當多的...... – BalusC 2010-03-19 13:51:22
您將繼續遇到的字符示例:http://www.i18nqa.com/debug/utf8-debug.html – Zoot 2014-01-28 16:38:42