Android:URI中的字符编码问题
在我的Android代码中,我构造了一个包含选项字符串的URL 在Android中,我使用编码选项字符串,然后在服务器端(运行Android:URI中的字符编码问题,android,encoding,character-encoding,uri,google-geocoder,Android,Encoding,Character Encoding,Uri,Google Geocoder,在我的Android代码中,我构造了一个包含选项字符串的URL 在Android中,我使用编码选项字符串,然后在服务器端(运行node.js)使用 总的来说,这很好用。例如,“München”在Android端出现,而“München”在服务器端出现 但只是偶尔,我会�解码后在服务器上显示“nchen” 在选项上运行decodeURIComponent()之前,这相当于M%EF%BF%BDnchen而不是正确的M%C3%BCnchen 发生这种事似乎很奇怪。。。我希望在输入端有“München”
node.js
)使用
总的来说,这很好用。例如,“München”在Android端出现,而“München”在服务器端出现
但只是偶尔,我会�解码后在服务器上显示“nchen”
在选项上运行decodeURIComponent()
之前,这相当于M%EF%BF%BDnchen
而不是正确的M%C3%BCnchen
发生这种事似乎很奇怪。。。我希望在输入端有“München”的所有情况下,编码/解码都是一致的
这是已知的行为吗?也许我可以使用不同的编码/解码方案
我还不能检测到一种模式,因为这种情况非常罕见,但我认为安卓5已经涉及到我迄今为止看到的每一个案例
我想到的是,这个问题可能会倒退一步。。。地名“München”来自以下行的查找:
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
String lookupString=“慕尼黑德国”//实际上,这将由用户在运行时输入
Geocoder Geocoder=新的Geocoder(上下文,Locale.getDefault());//默认语言环境为'de',因此应返回'München'
列表地址=geocoder.getFromLocationName(lookupString,1);
地址=地址。获取(0);
字符串placeName=地址。getLocality();//应该是门钦
那么问题可能就在这个阶段?但是,我在所有情况下都使用相同的
Geocoder
类,所以我真的不应该在一个情况下使用“münchen”和“m”�检查您的Java文件是否采用UTF-8编码
我已经使用“de”(不是我的默认值)测试了您的代码,它重新运行正确工作的字符串:
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();
}
String lookupString=“慕尼黑德国”;
Geocoder Geocoder=新的Geocoder(这是新的地区(“de”);
列出地址;
试一试{
addresses=geocoder.getFromLocationName(lookupString,1);
地址=地址。获取(0);
字符串placeName=address.getLocality();//应为München
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
检查
Charset.defaultCharset()
method.Hmm,好的。我确实想到了这一点,但我对此不予理睬,因为我的理解是,查找的地名的编码不会受到Java代码文件本身编码的影响。。。我不是在代码中硬编码“München”,而是通过编程方式查找它。@drmrbrewer,您从哪里收到这个字符串?检查要比较的每个字符号。如本文所述,字符串来自Geocoder
查找——请参阅代码中的string placeName
snippet@drmrbrewer,在我的设备上测试。这似乎是可行的代码。所以,对于某些设备上的某些用户来说,有没有任何关于为什么最终会出现“M”的建议�而对于大多数用户来说,它被正确地称为“München”?