2014-10-07 100 views
1

我有一個簡單的問題,但我沒有找到任何解決此問題的方法。UTF8大寫顯示不正確

我在數據庫(MySQL)中使用utf8_general_ci編碼,而在網站中使用的是PHP。

在HTML頁面中也使用utf-8作爲編碼(<meta charset="utf-8">)。

問題是,在數據庫中我存儲了一個以Â開頭的單詞,在引用之後它顯示爲Ã,差異在^和〜之間。未編碼:Â。附:Ã。

問題是,在網站上出現這個 ?在Â的地方,但如果我改變它的小寫它通常出現。只有大寫字母在加重時出現錯誤。

我希望我很清楚。

謝謝。

+0

什麼DBMS?你使用的是ASP嗎? PHP的? – 1010 2014-10-07 18:56:01

+0

已經編輯過,我正在使用PHP。 DB是MySQL。謝謝您的幫助。 – Fred 2014-10-07 18:56:48

+0

你是否檢查過瀏覽器的字符編碼? – 1010 2014-10-08 03:03:47

回答

0

您可能還需要設置MySQL鏈接的傳輸字符編碼。

mysql_query('SET NAMES "utf8"'); 
mysql_query('SET CHARACTER SET utf8'); 
mysql_set_charset('utf8'); 

如果這沒有幫助,請確保服務器不會覆蓋您的<meta charset="utf-8">通過Content-Type HTTP標頭。您可能需要覆寫以及使用

header('Content-Type: text/html; charset=utf-8'); 
+0

感謝您的快速回答。我會盡力做到這一點。只有一個問題,如果其他小寫字母與編碼工作爲什麼不大寫? – Fred 2014-10-07 19:01:36

+0

這可能是小寫重音字符與您正在通信的字符集共享相同的UTF-8代碼,但大寫字母與其他編碼中的其他位置不同。也許他們在小寫字母之後再加一個字符,並將整個大寫字母部分移動一個。 – Zenorbi 2014-10-07 19:05:53

+0

它不工作......現在出現這封信,但其他人看起來像這樣:á。它不是「解碼」,如果在數據庫中是Â它看起來像Â,如果我把它看起來Ã。但編碼的出現編碼。 – Fred 2014-10-07 19:06:30

0

正如你可以看到here,解碼UTF-8編碼的Windows1252或ISO-8859-1產生,而不是一個。

並且在windows1252中有E2代碼,它與它的unicode代碼點U + 00E2一致。 這使我認爲你的應用程序的某些部分正確解碼utf-8字符串,但未能正確編碼它。

你應該檢查你的數據是否一致地存儲在你的數據庫的utf-8中,也許你可以選擇你的varchar數據作爲varbinary來確定(在sqlserver中你可以轉換爲二進制,在mysql中我不知道是否有用)。

並檢查您的html輸出的來源,看看你實際得到什麼字節。

這不是正確的答案,但太長了評論...

+0

這是一個紅色的鯡魚,UTF-8和Latin-1和CP1252在160-255範圍內基本相同,其中包括西歐語言(某些荒謬約束取樣)的小寫字母和大寫字母重音字符。 – tripleee 2014-10-08 03:34:03

+0

mmm,碼點重合,但utf8使用兩個字節(它們都不是E2),因此它們不相同。 – 1010 2014-10-08 03:40:02

+0

哎呀,主要的失誤,是的;感謝您的更正。 Unicode和Latin-1在這個範圍內是相同的,但UTF-8顯然不是。 – tripleee 2014-10-08 04:06:56