1

我目前正在尝试从 Xml 文件(可通过此地址访问:http ://mobilite.euroairport.com/services/getDepartureAirports?language=French )中提取机场列表。我的问题是应该出现在“DÜSSELDORF”中的“Ü”是不可能阅读的(甚至直接是 Ie 或 firefox)。我得到这样的东西:D□SSELDORF 或 D SSELDORF 或 D?SSELDORF

以下是我用来尝试查找此文件编码的代码(n 是包含“DÜSSELDORF”的字符串):

        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");

这是结果(在 Android 的 Logcat 中):

        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

我的问题是:我在尝试读取此字符串时是否犯了错误,还是由于服务器的问题?

4

2 回答 2

2

Definitley 服务器/(数据服务)(错误配置问题)/错误。

服务器在 HTML/XML 响应中返回这一行:

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

我刚刚检查了 xml 的字节转储,这就是 wireshark 表示“DSSELDORF”的方式:

D..SSELDORF

在十六进制转储中(十六进制值 c2 9d参见UTF-8 代码表):

44 c2 9d 53 53

这将是:

44 - D
53 - S

和 C2 9D

被解释为控制字符,也称为不可打印字符 - 因此“缺失” U - 这也解释了您的 logcat 输出。

于 2012-10-08T15:24:57.283 回答
0

我想我发现了问题。我设法访问了 web 服务代码,我发现用于更新 web 服务 bdd 的文件是用 ANSI 编码的。使用以下代码读取此文件:

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

我想问题就在这里,所以我会要求客户端更改此文件的编码,但我不确定这是我问题的唯一原因。

谢谢你们的帮助。

于 2012-10-17T12:55:42.223 回答