Android 用德语字符编码URL
在我的应用程序中,我收到一个URL,如 当fullurl中没有德语字符时,我可以不用编码就直接使用它,而且效果很好。但是,如果我收到一个URL,比如上面的URL,它就不起作用(u是问题的根源)。下面我尝试对URI的各个部分进行编码,但没有效果。如往常一样,非常感谢您的建议Android 用德语字符编码URL,android,http,url,urlencode,Android,Http,Url,Urlencode,在我的应用程序中,我收到一个URL,如 当fullurl中没有德语字符时,我可以不用编码就直接使用它,而且效果很好。但是,如果我收到一个URL,比如上面的URL,它就不起作用(u是问题的根源)。下面我尝试对URI的各个部分进行编码,但没有效果。如往常一样,非常感谢您的建议 public ImageDownloader(String fullurl) throws URISyntaxException{ URI uri = new URI(fullurl); path = uri
public ImageDownloader(String fullurl) throws URISyntaxException{
URI uri = new URI(fullurl);
path = uri.getPath();
path = URLEncoder.encode(path);
query = uri.getQuery();
query = URLEncoder.encode(query);
auth = uri.getAuthority();
url = "http://" + auth + path + query;
}
可能编码器das将Umlaut编码为UTF-8字符(所以u将被编码为两个字符),并且它们在服务器上没有正确地放回一起(对于我们来说,它不适用于Tomcat)。为了解决这种情况,我们使用
URLEncoder.encode(param,“ISO-8859-1”)
对参数进行编码 没有简单的答案,因为它取决于服务于预期编码的URI的服务器
通常是UTF-8
在这种情况下:使用String.getBytes,指定UTF-8编码,并从中获取字节数组。通过获取所有字节,将该字节数组重新编码为字符串,您可以使用Android类来帮助您。该类有一个
encode()
方法,该方法将使用UTF-8对字符串进行编码。最近,我遇到了一个关于名称包括umlauts和德语特殊字符的图像的URL问题,我花了一天时间寻找解决方案。如果文件名或目录名中有äor andü,图像就不会出现。我想可能是spring,或者我正在使用的其他Java技术,或者是在浏览器中。奇怪的是,即使对url进行编码,它也无法找到图像。但最终,解决方案是在我的tomcat server.xml配置中。在server.xml文件中,找到连接器并添加以下两行:
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
最后,它应该是这样的:
<Connector connectionTimeout="20000"
port="8080"
protocol="HTTP/1.1"
redirectPort="8443"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"/>
现在我不需要对url进行url编码。这对我的客户是一个帮助,因为他们可以在URL中看到拼写正确的德语单词
这里还有另一个提示:如果您在eclipse中编码并从eclipse中启动和停止服务器,那么配置文件(server.xml)可能位于您的eclipse工作区的Servers文件夹中。必须在此处对其进行更改才能与eclipse一起使用。当您在主体tomcat配置中进行了更改,并且URL在那里工作,但在eclipse中运行服务器时,URL仍然被破坏,这可能会令人恼火
那是为了我。我希望它能帮助其他人!:-) 您是否尝试过取消订阅:
android.net.Uri.encode(urlString, ":/");
它对字符串进行编码,但跳过“:”和“/”我添加了这个,但仍然不起作用。我认为问题在于它在查询中编码前斜杠,但这不起作用。不幸的是,这不是真的,Android将一些字符编码为%hh%hh,这甚至会导致谷歌自己的web服务出现问题。bluewhile:你知道UTF-8编码将非ASCII字符编码为多个字节吗?是的,你只是说它可以编码为两个字节,或者我理解错了。如果你通过ie=UTF-8参数告诉他们,甚至谷歌服务也能工作。我真丢脸。
android.net.Uri.encode(urlString, ":/");