Android:URI中的字符编码问题

时间:2016-01-13 10:31:00

标签: android encoding character-encoding uri google-geocoder

在我的Android代码中,我构建了一个包含选项字符串的URL。

在Android中,我使用Uri.encode(options)对选项字符串进行编码,然后在服务器端(运行node.js)我使用decodeURIComponent(options)

一般来说,这工作正常。例如,“München”进入Android端,“München”出现在服务器端。

但偶尔,我会在解码后在服务器上收到“M nchen”。

在选项上运行decodeURIComponent()之前,这相当于M%EF%BF%BDnchen而不是正确的M%C3%BCnchen

这种情况似乎很奇怪......我希望对所有“München”输入的实例进行一致的编码/解码。

这是否已知行为?也许我可以使用不同的编码/解码方案?

我还无法检测到一个模式,因为这些实例非常罕见,但我认为到目前为止我见过的每个案例都涉及到Android 5。

对我来说,问题可能会更进一步......地名“München”来自Geocoder查询,其中包含以下几行:

String lookupString = "Munich Germany"; // in practice this would be entered by the user at runtime
Geocoder geocoder = new Geocoder(context, Locale.getDefault()); // default locale is 'de' so 'München' should be returned
List<Address> addresses = geocoder.getFromLocationName(lookupString, 1);
Address address = addresses.get(0);
String placeName = address.getLocality(); // should be München

所以问题可能就在这个阶段?但同样,我在所有情况下都使用相同的Geocoder类,所以我真的不应该在一个案例中使用“München”而在另一个案例中使用“M nchen”吗?

1 个答案:

答案 0 :(得分:0)

检查您的Java文件是否采用UTF-8编码。

我已经使用&#34; de&#34;测试了您的代码。 (对我来说不是默认值),它正确地重新运行String:

String lookupString = "Munich Germany";
        Geocoder geocoder = new Geocoder(this, new Locale("de"));
        List<Address> addresses;
        try {
            addresses = geocoder.getFromLocationName(lookupString, 1);
            Address address = addresses.get(0);
            String placeName = address.getLocality(); // should be München
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

检查Charset.defaultCharset()方法。