使用德语字符编码URL

时间:2011-05-04 09:23:53

标签: android http url urlencode

在我的应用中,我收到了一个网址,例如

http://www.wassersportlotse.de/php/lib/smart_image_resizer/image.php/Mühlendammschleuse.jpg?image=/media/images/uploads/Mühlendammschleuse.jpg

如果在fullurl中没有德语字符,我可以在没有编码的情况下使用它,它可以正常工作。但是,如果我收到一个如上所示的URL,则它不起作用(ü导致问题)。下面我试图编码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;


}

5 个答案:

答案 0 :(得分:1)

也许编码器das将变音符号编码为UTF-8字符(因此ü将被编码为两个字符)并且它们不会在服务器上正确放回(对我们来说它不能与Tomcat一起使用)。为了解决这种情况,我们使用URLEncoder.encode(param, "ISO-8859-1")对参数进行编码。

答案 1 :(得分:0)

没有简单的答案,因为它取决于服务于该URI的服务器所期望的编码。

通常是UTF-8。

在这种情况下:使用String.getBytes,指定UTF-8编码,并从中获取字节数组。通过将所有字节< = 127原样取代,并用%hh格式替换所有其他字节,将该字节数组重新编码为字符串。 (百分号,然后两个十六进制数字)。请参阅http://greenbytes.de/tech/webdav/rfc3986.html#rfc.section.2.1

答案 2 :(得分:0)

您可以使用Android的Uri课程来帮助您。该类有一个encode()方法,它将使用UTF-8对您的字符串进行编码。

答案 3 :(得分:0)

我最近遇到的图片网址存在问题,其中包含变音符号和德语特殊字符的图片,我失去了一天寻找解决方案。如果文件名或目录名中有ä或ü,则图像根本不会出现。我认为它可能是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"/>

现在我不需要对网址进行网址编码。这对我的客户有帮助,因为他们可以在拼写正确的网址中看到德语单词。

这是另一个提示:如果您在eclipse中编码并从eclipse内部启动和停止服务器,那么配置文件(server.xml)可能位于Servers文件夹中的eclipse工作区中。它必须在这里更改才能与eclipse一起使用。当您在主要的tomcat配置中进行更改并且URL在那里工作时,这可能会令人抓狂,但是在eclipse中运行服务器时它们仍然会被破坏。

那为我做了。我希望它可以帮助那里的人! : - )

答案 4 :(得分:0)

你尝试过没事:

android.net.Uri.encode(urlString, ":/");

它对字符串进行编码但跳过“:”和“/".