2009-09-03 174 views
3

我有一個非常奇怪的問題,在網頁上顯示不正確(或根本不顯示)英鎊符號。字符編碼問題 - 英鎊符號的奇怪行爲(UTF-8)IE6/ASP/XML

我在文本框中鍵入文本,然後在顯示在新的IE(6)窗口中之前獲取(簡要地)存儲在XML中。

最糟糕的是這是不一致的。我有三種不同的事情發生:
1.磅符號甚至沒有出現在源代碼中(假設XML正在剝離它,因爲它似乎默認使用UTF-8)。
2.磅符號出現在源代碼中,但不在網頁上。
3.英鎊符號出現在網頁上的源和精細(通常,如果發生這種情況,首次顯示)。

現在,這只是更大問題的一個特定部分。我一直在研究這個問題並做了一些研究,看來如果我使用純ASCII(ISO 8859-1 - Western Europe)並轉換爲UTF-8,它不知道符號是什麼,並將其完全移除(在這種情況下,tho我已經看到它被替換爲'?',一個盒子或其他地方的'?')。

如果您輸入英鎊符號作爲UTF-8並轉換回ISO 8859-1,它會在英鎊符號前獲得大寫字母(Â)。

我可以理解後者,至少在基本層面上 - 這是因爲我們的系統必須在整個字符編碼中保存有不同的字符編碼(或存儲在Oracle中)的磅符號,並且由於我們沒有指定字符編碼(至少一般)爲我們的網頁,有時IE會感到困惑,並且不能正確顯示內容。

我不明白的是上面列出的不一致的結果。

我意識到自己在最初的解釋中有點模糊,但我希望寫出我的簡短解釋可能有助於我自己理清思路,並可能幫助其他人瞭解將來的類似問題。編輯:另外,我意識到我可以交換HTML實體的所有英鎊符號(&英鎊;),但我覺得這是費時和雜亂的(如果它存儲在Oracle中,稍後傳遞給PDF ,Excel等?)。

很明顯,任何指針和建議將不勝感激!

謝謝!

+0

服務器平臺是否有? – AnthonyWJones 2009-09-03 10:09:24

+0

感謝安東尼:Windows 2003服務器 – FrostbiteXIII 2009-09-03 10:20:34

回答

2

我在一個文本框,其中 然後得到(簡述)顯示在一個新的IE(6) 窗口之前存儲在XML 鍵入文本。

這個問題很可能嵌入到這個序列中。如果你能詳細說明這個序列如何獲得的細節,這將有所幫助。

這類問題最常見的原因是理解客戶端實際編碼字符與服務器認爲編碼是什麼的理解不匹配。最簡單的解決方法是將accept-charset屬性放置在form元素上,這使得顯式地顯示帖子的字符編碼。

張貼在stuff字段中的文本將使用UTF-8編碼。

原因一些inconsitencies是: -

  1. 它可能使服務器可以正確,但隨後的代碼在數據庫中的字符時,發送這些相同的字符瀏覽器反向腐敗,一切正常再次在瀏覽器上。
  2. ISO-8859-1在不同的地方意味着不同的事物。 IE6與該字符集有些鬆散,實際上將視爲Windows-1252。其他應用程序對ISO-8859-1進行了更嚴格的解釋。
+0

感謝安東尼,不斷遇到與此無關的不同問題。事實上,我可能不得不停止研究這一點,只是做一個搜索和替換html實體的井號(£),即使我真的不想... 當我得到更新後此外,感謝詳細的答覆(我不能「贊」你的迴應,直到我有15個代表,所以我一拿到那個...)。 – FrostbiteXIII 2009-09-04 14:11:15

+0

@FrostbiteXIII,無論如何,還有你的theres 10;)。 – AnthonyWJones 2009-09-04 14:18:41

+0

謝謝(不能相信你只是說,謝謝你沒有填補這個無意義的行,使其超過15個字符!)! :) – FrostbiteXIII 2009-09-04 14:22:32

0

你說網站並不總是說哪個字符編碼被使用。在這種情況下,瀏覽器將不得不猜測。他們在不同的頁面上可能會有不同的猜測,這很可能是您看到不一致的原因。很多字符編碼都是「ASCII plus」(ASCII加擴展拉丁字符; ASCII加希臘字母; ASCII加西裏爾字母等)。瀏覽器應該如何知道哪個是有意的?一種方法是通過查看代碼點頻率:「我看到很多代碼點[blah],這將是希臘字符[?A]或西里爾字符[?B]。 A]在希臘語中並不常見,但[?B]在保加利亞語中相當常見,因此該頁面很可能以西裏爾字母表示。「那種事。這意味着頁面上稍有不同的文字會圍繞代碼點頻率進行混洗,從而導致瀏覽器完全不同地解釋文本編碼。這就是爲什麼我們現在使用UTF-8。這也是我們爲什麼在HTTP標頭和元標籤中聲明文本編碼的原因。