在我的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”吗?
答案 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()
方法。