2011-01-09 38 views
1

嘗試使用Bing API進行搜索時,我得到的字符不是可打印的,並且似乎沒有任何額外的信息。目標是將XML(UTF-8)響應保存爲稍後將被解析的文本文件。放棄在服務器XML響應中返回的不可打印字符

我的代碼目前看起來是這樣的:

URL url = new URL(queryURL); 

    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
    BufferedWriter out = new BufferedWriter(new FileWriter(query+"-"+saveResultAs)); 
    String str = in.readLine(); 
    out.write(str); 

    in.close(); 
    out.close(); 

當我送「STR」的內容來安慰它看起來是這樣的:

alt text

,這裏是一個什麼新創建的本地XML文件如下所示:

alt text

我應該如何轉換UTF-8文本,使str沒有多餘的字符?

+1

這是一個轉碼錯誤;在解碼爲字符串之前使用XML解析器或檢測編碼:http://www.w3.org/TR/REC-xml/#sec-guessing我假設你需要一個字符串 - 如果你只是想保存本地文件,讀寫字節。 – McDowell 2011-01-09 11:21:24

+0

@McDowell我最終直接讀取和寫入字節到文件。使用String是自我限制。謝謝! – Penang 2011-01-09 21:44:57

回答

2

如果您知道前期的編碼,你應該

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8")); 

和寫入文件的平臺默認的編碼,同時還宣佈爲UTF-8後作家一樣...在你的榜樣。

從XML聲明中讀取編碼以避免意外可能是明智的。

如果您只想存儲數據供以後使用,則無論如何編碼/解碼都沒有用處。只需讀取字節並將它們寫出即可。保留檢測XML解析器編碼的任務。

+0

爲InputStreamReader提供「UTF-8」幫助我走上了正軌。謝謝! – Penang 2011-01-09 21:41:15

1

XML解析器將處理編碼/解碼,並將適當的字符反饋給您(例如,SAX解析器將通過characters()方法回調執行此操作)。所有你需要做的就是將它存儲在一個合適的文件(可能有一個合適的Byte-Order-Mark?)

相關問題