Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:URI中的字符编码问题_Android_Encoding_Character Encoding_Uri_Google Geocoder - Fatal编程技术网

Android:URI中的字符编码问题

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”

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

在Android中,我使用编码选项字符串,然后在服务器端(运行
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”?