在我的程序中,当我的servlet获取参数时,它应该为php创建一个urlConnection,然后返回创建的xml。一切都很好但似乎我的程序不支持特殊字符。我相信关键点是servlet。但是我该怎么做才能让servlet支持特殊字符呢?例如:
String urlString = "XXXXXXX";
URL url= new URL(urlString);
URLConnection connection = url.openConnection();
我希望连接到.php的网址可以是:
http://XXX.php?name=José&type=artist
但结果显示我似乎将网址更改为:
http://XXX.php?name=Jos&type=artist
它忽略了特殊字符é。 我该怎么办?
答案 0 :(得分:4)
网址中仅允许those characters:
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"
。如果不确定,请联系服务器管理员。 é
的网址编码形式为UTF-8 %C3%A9
和ISO-8859-1 %E9
。