在我的程序中,当我的 servlet 获取参数时,它应该与 php 建立 urlConnection,并获取创建的 xml。一切都很好,但我的程序似乎不支持特殊字符。我认为关键点是servlet。但是我该怎么做才能让servlet支持特殊字符呢?例如:
String urlString = "XXXXXXX";
URL url= new URL(urlString);
URLConnection connection = url.openConnection();
我希望连接到 .php 的 url 可以是这样的:
http://XXX.php?name=José&type=artist
但结果显示我的网址似乎更改为:
http://XXX.php?name=Jos&type=artist
它忽略了特殊字符 é。 我该怎么办?
最佳答案
仅 those characters允许在 URL 中使用:
RFC 3986 section 2.2 Reserved Characters (January 2005)
! * ' ( ) ; : @ & = + $ , / ? # [ ]
RFC 3986 section 2.3 Unreserved Characters (January 2005)
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~
其他字符必须为 URL-encoded .
基本上,您必须对每个请求参数值进行 URL 编码(实际上还有参数名称,但由于它们在您的特定情况下显然是硬编码的并且已经是 URL 安全的,因此没有必要)。
String name = "José";
String type = "artist";
// ...
String url = String.format("http://XXX.php?name=%s&type=%s",
URLEncoder.encode(name, "UTF-8"),
URLEncoder.encode(type, "UTF-8"));
请注意,所涉及的字符集取决于目标服务器支持的字符集。许多旧服务器仍配置为使用 ISO-8859-1。然后,您应该将上面示例中的 "UTF-8"
替换为 "ISO-8859-1"
。不确定时请联系服务器管理员。 é
的 URL 编码形式采用 UTF-8 %C3%A9
和 ISO-8859-1 %E9
格式。
另请参阅:
关于java - 如何设置servlet使其支持特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15887448/