2012-10-04 37 views
2

我們做以下幾點:與數字字符編碼JSoup引用問題

  1. 打開的Reader文件,使用一些指定的編碼。
  2. 在每一行中閱讀,將其解析爲CSV。
  3. 對於一些在CSV數據列,把它傳遞給JSoup到如下清理HTML:

    public String apply(@Nullable String input) { 
        Document document = Jsoup.parse(input); 
    
        return document.text(); 
    } 
    

這個偉大的工程,除了在numeric character references存在,如 。看起來發生的事情是,因爲在我們找出編碼(爲了使CSV解析工作)之後我們必須做JSoup調用,當JSoup轉而將硬編碼的字節轉換成字符時,我們正在工作與錯誤的字符集。 Byte 160(0xa0)在windows-1252中是非破壞性的空間,但不是有效的Unicode字符,所以當JSoup用一個字節替換數字字符引用時,給我們提供了不好的數據。

有沒有辦法解決?這將需要JSoup被賦予數字字符引用的「源編碼」,或類似的東西。

回答

0

嘗試調用text()之前如下:

document.outputSettings().charset("windows-1252"); 

對於多個輸出設置見javadoc

+0

原來我很困惑 - 問題是別的。不過,這聽起來像是對原始問題的正確答案。關於API的一個問題 - 這實際上不是*輸出*設置,它是* input *編碼的問題,對吧? –