【问题标题】:how to set servlet to let it support special character?如何设置 servlet 让它支持特殊字符?
【发布时间】:2013-03-31 00:39:53
【问题描述】:

在我的程序中,当我的 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

它忽略了特殊字符 é。 我该怎么办?

【问题讨论】:

  • 我应该怎么做:向我们展示你的代码。
  • 还有一件事:格式化你的问题,否则没人敢读。
  • 已编辑。那我需要编码什么的吗?

标签: java servlets special-characters urlconnection


【解决方案1】:

URL 中只允许使用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"。不确定时联系服务器管理员。 é 的 URL 编码形式是 UTF-8 %C3%A9 和 ISO-8859-1 %E9

另见:

【讨论】:

  • 我的servlet 得到了José,然后servlet 把它传给javascript,你知道为什么javascript 创建一个新的html 会显示Jos 吗?谢谢!
  • 您在某些时候指定了错误的编码。仔细阅读Unicode - How to get the characters right?,了解所有可能出错的地方以及如何解决。
猜你喜欢
  • 2011-12-27
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多