2013-04-22 32 views
0

我知道這個問題幾乎是一樣古老世界和存在於網頁成千上萬的答案,但我仍然無法找到是什麼在我的情況的問題,爲什麼字符顯示爲黑色問號( ):(多語種網站 - 性格enconding

我們有一個多語言網站,目前支持10種語言,某些字符顯示不正確(ве сией,聯合國際),可能會出現在非拉丁語中的常規字符和其他字符同一頁面上的話,正確顯示相同的字符。在拉丁語中,所有的特殊和普通字符正確顯示。

我試圖與編碼玩,但是當在一個地方它解決了問題出現在其他地方的問題。

這裏,我的編碼配置如何:
1)在MS SQL Server中,我們使用NVARCHAR(MAX)列和SQL_Latin1_General_CP1_CI_AS歸類。
2)在web應用程序中,在web.config文件中我有:<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
3)在頁面本身,我們有<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

在響應報頭,鍍鉻所示:Content-Type:text/html; charset=utf-8

我想念什麼?爲什麼我仍然看到那些黑色的問號?我應該檢查/更改以正確顯示所有字符。

感謝

UPDATE

我發現了一個問題,它是完全不傳輸編碼相關。我認爲這個問題與編碼有關,它是如何通過數據庫 - > ASP.NET - >瀏覽器,但經過大量調試後,我發現問題在解決,輸出如何寫入HttpContext.Current.Response.Filter ....我們有我們的自定義過濾器,並以某種方式傳遞給過濾器的寫入方法的緩衝區(byte[])。它破壞了Unicode字符串的數組,所以有時候字符串的最後一個字符被翻譯爲亂碼。我仍然沒有找到如何正確解決它,但現在,我可以禁用我們的過濾器,並且不再有任何問題。

感謝所有。

回答

0

我不知道MS SQL服務器,但你有沒有試過有它使用UTF-8編碼,而不是Latin-1的?快速Google search顯示:

DEFAULT CHARACTER SET utf8; 
DEFAULT COLLATE utf8_general_ci; 

我認爲這將是一個更好的選擇比SQL_Latin1_General_CP1_CI_AS使用。

+0

我在MS SQL中沒有發現任何UTF-8歸類。我發現使用「BIN2」排序規則的建議,但它沒有幫助。 – 2013-04-22 10:32:06

+0

我發現[this](http://stackoverflow.com/questions/12512687/sql-server-utf8-howto),現在甚至有更多理由不碰MSSQL,即使是10'駁船杆。 ICK。 – Quentin 2013-04-22 10:36:41

+0

@Quentin其實我不認爲問題是在DB內,因爲同一個字符可以在某個時候出現正確的問題,如果一個字符是OK,那麼另一個字符就是問號......另外,當我在其他地方使用數據庫的內容,我沒有看到任何問題:( – 2013-04-22 10:40:44

0

如果頁面呈現在缺乏這些字形的字體,他們將與佔位符渲染。

例如,我的手機上,有幾個你說能正確顯示爲你顯示我佔位符的一些文本的例子。

enter image description here

+0

我們正在使用「arial,tahoma」字體定義通過CSS ...因爲我知道它非常標準和Web安全字體。在一個單詞中,相同的「字母/字符」看起來不錯,但換句話說,它就是問號。 – 2013-04-22 10:46:49

+0

您看到的佔位符是我的問號......所以它對我和您的顯示都不正確是我們每個人看到的不正確的字符...我幾乎可以確定網絡服務器和瀏覽器之間的問題,但無法找到我應該改變的是什麼:( – 2013-04-22 10:51:10

+0

例如ве сией在我的桌面工作站上顯示佔位符以及。 「ве」之後的​​兩個字符應該是什麼? Unicode代碼點將是一個很好的,毫不含糊的表示。 (例如,如果我沒有弄錯,則爲[U + 0432](http://www.fileformat.info/info/unicode/char/432/index.htm)。) – tripleee 2013-04-22 11:12:49