2011-08-01 15 views
1

我在使用JSoup庫解析和呈現頁面時遇到了字符集問題。這裏是它呈現在網頁的一個例子:爲什麼在這個網頁(使用JSoup生成)中沒有正確呈現UTF-8字符?

http://dl.dropbox.com/u/13093/charset-problem.html

正如你所看到的,那裏應該是'字,?正在被渲染(即使你查看源代碼)。

通過下載網頁,使用JSoup進行解析,然後在進行一些結構更改後再次重新渲染,即可生成此頁面。

我下載的頁面如下:

final Document inputDoc = Jsoup.connect(sourceURL.toString()).get(); 

當我創建的輸出文檔我這樣做如下:

outputDoc.outputSettings().charset(Charset.forName("UTF-8")); 
outputDoc.head().appendElement("meta").attr("charset", "UTF-8"); 
outputDoc.head().appendElement("meta").attr("http-equiv", "Content-Type") 
      .attr("content", "text/html; charset=UTF-8"); 

任何人都可以提供建議,以我在做什麼錯誤?

編輯:請注意,源頁面http://blog.locut.us/和你會看到,它似乎正確地呈現

+0

它肯定看起來像一個編碼問題。也許在服務器上?如果直接連接並查看返回的流,文本是否仍然有「?」問題? –

+0

源頁面是http://blog.locut.us/,它似乎正確呈現: -/ – sanity

回答

4

只要您將字符寫入響應的輸出流,而響應的字符編碼未涵蓋該字符,問號就是典型的問題。在提供響應時,您似乎依賴於平臺默認字符編碼。您網站的回覆Content-Type標題也通過缺少charset屬性來確認此問題。

假設你使用一個servlet服務於修改HTML,那麼你應該使用HttpServletResponse#setCharacterEncoding()之前設置的字符編碼寫入修改後的HTML出來。

response.setCharacterEncoding("UTF-8"); 
response.getWriter().write(html); 
+1

工作 - 謝謝! – sanity

+0

不客氣。 – BalusC

0

的問題是最有可能在讀取輸入頁面,你需要爲源的正確編碼太。

+1

當Jsoup使用Jsoup.connect()檢索頁面時,是否不會確定它? – sanity

相關問題