2012-10-08 63 views
1

目前我試圖從一個XML文件中提取(也就是通過這個地址訪問:http://mobilite.euroairport.com/services/getDepartureAirports?language=French)機場的列表。 我的問題是,「U」應該出現在「杜塞爾多夫」是不可能的讀取(甚至IE或Firefox直接)。 我得到這樣的: d□杜塞爾多夫或d杜塞爾多夫或d杜塞爾多夫Java的,未知charachtersン□XML響應

以下是我曾經試圖找到該文件的編碼代碼(n是包含「杜塞爾多夫」的字符串)? :

 byte[] bytes = n.getBytes();    
     Log.w("tagtag", (char) bytes[0] + " "+(char) bytes[1]+" "+(char) bytes[2]); 
     bytes = n.getBytes("ASCII");    
     Log.w("tagtag", (char) bytes[0] + " "+(char) bytes[1]+" "+(char) bytes[2]); 
     bytes = n.getBytes("Cp1252");   
     Log.w("tagtag", (char) bytes[0] + " "+(char) bytes[1]+" "+(char) bytes[2]); 
     bytes = n.getBytes("UTF-8");    
     Log.w("tagtag", (char) bytes[0] + " "+(char) bytes[1]+" "+(char) bytes[2]); 
     bytes = n.getBytes("ISO8859_1");    
     Log.w("tagtag", (char) bytes[0] + " "+(char) bytes[1]+" "+(char) bytes[2]); 
     bytes = n.getBytes("ISO8859_2"); 

這是結果(logcat的Android設備):

 10-08 09:41:30.557: W/tagtag(1506): D □ ン 
     10-08 09:41:30.557: W/tagtag(1506): D ? S 
     10-08 09:41:30.567: W/tagtag(1506): D ン S 
     10-08 09:41:30.567: W/tagtag(1506): D □ ン 
     10-08 09:41:30.577: W/tagtag(1506): D ン S 
     10-08 09:41:30.637: W/tagtag(1506): D ン S 

我的問題是:讓我的嘗試讀取這個字符串,或者是由於問題的錯誤服務器 ?

謝謝

+2

似乎是一個ecoding問題。我相信觀察相關鏈接可能很有用-----> –

+2

在提供的鏈接上,它返回DELL的DSELLDORF?除此之外,我使用wireshark檢查了流量,並且服務器返回「Content-Type:application/xml; charset = UTF-8 \ r \ n」,其中AFAIK表示服務器配置錯誤 – linski

+0

yes返回DSSELDORF。這就是爲什麼我說即使是IE或Firefox也看不懂它的原因。關於你的建議約翰,我不明白你想要我看什麼? – sam

回答

2

Definitley服務器/(數據服務)(錯誤配置問題)/錯誤。

服務器返回此行HTML/XML響應:

Content-Type: application/xml;charset=UTF-8\r\n 

我的XML的只是檢查字節轉儲,這是Wireshark如何代表 「杜塞爾多夫」:

D..SSELDORF 

在十六進制轉儲(見UTF-8 code table爲十六進制值C2 9D):

44 c2 9d 53 53 

具體做法是:

44 - D 
53 - S 

和 C2 9D

被解釋爲有也被稱爲非打印字符控制字符 - 因此「缺失」 U - 這也解釋了你的logcat的輸出。

+0

謝謝你!這正是我所猜測的,但我不太瞭解服務器和編碼 – sam

+0

np,很高興幫助! :) – linski

0

我認爲,我發現這個問題。 我設法得到訪問Web服務代碼,我發現,用來更新Web服務的BDD文件中的ANSI編碼。 該文件使用此代碼閱讀:

InputStreamReader input = new InputStreamReader(new FileInputStream("vols"), "UTF-8"); 
BufferedReader buffer = new BufferedReader(input); 

我想,問題就在這裏,所以我會要求客戶更改此文件的編碼,但我不知道這是唯一的原因,我的問題。

感謝您的幫助球員。