2011-08-04 42 views
0

我從外部系統(SSAS)中拉取文本並在ASP 2.0(.NET 4)中的TableCell中顯示文本。文本顯示爲£14,243,123.26(注意英鎊符號前)。在ASP中對英鎊符號進行編碼

我對此的理解是,c#使用UTF-16(SSAS可能與SQL Server一樣),並且ASP 2.0會將頁面顯示爲UTF-8,這就是發生的情況。這裏的區別可能導致顯示問題。

但是,這個問題似乎一般在引擎蓋下處理,所以我想知道爲什麼不在這裏?是否因爲ASP中的許多控件自動編碼字符串,因爲Table控件沒有?在桌面上使用Server.HtmlEncode似乎工作,但我希望這並不是無處不在。

回答

2

UTF-8/UTF-16轉換應該不是是一個問題。你需要準確地追查事情會出錯,具有診斷和使用工具:

  • 使用Wireshark看回來的確切響應。您需要檢查內容類型,頁面本身中的任何字符集聲明以及用於表示英鎊的字節
  • 在服務器上,當您提取數據時,轉儲所涉及的字符,某些東西像這樣的(假設一些適當的方法Log.Write):

    Log.Write("Retrieved string: '{0}' length {1}", text, text.Length); 
    foreach (char c in text) 
    { 
        Log.Write(" Character {0}: U+{1:x4}", c, (int) c); 
    } 
    
  • 如果你很談得來從一個控制檯應用程序服務器,嘗試相反,傾出的字符將按照以上。這可能會讓實驗變得比重新部署和服務器日誌困難得多。

一旦確定了問題的確切位置,如果您無法解決問題,則可以編輯問題以提供該信息。

+0

謝謝,這有幫助。我在兩個地方遇到了問題,第一次在遊戲中「固定」,所以我不相信它不會重新出現。第二個是因爲我使用Encoding.Default.GetString()序列化JSON,將其更改爲Encoding.UTF8.GetString(),並且都很好。在這兩種情況下,字符都是U + 00a3,這是英鎊的正確Unicode字符。 –

0

最可能的原因是您沒有將ASP.NET頁面的編碼設置爲UTF-8。

您可以通過在Web瀏覽器中強制將頁面編碼強制爲UTF-8來檢查是否存在此問題。如果修復了£符號顯示,那麼問題出在您的頁面編碼設置上。

Server.HtmlEncode解決了這個問題的事實是一個很好的指向頁面編碼的錯誤。

問題不在於ASP.NET和c#中的UTF-16和UTF-8之間的不匹配。 Windows和c#在內部使用UTF-16格式,但這並不妨礙ASP.NET在被問及時發出UTF-8編碼頁面。