1

我正在 Google AppEngine 中制作一个小项目,但我遇到了国际字符的问题。我的程序通过 url "page.html?data1&data2..." 从用户那里获取数据并将其存储起来以供以后显示。

但是,当用户使用一些国际字符(如 åäö)时,它会被编码为 %F4、%F5 和 %F6。我认为这是因为 http-requests 中只允许 ASCII 表中的前 128(?)个字符。

有没有人对此有很好的解决方案?任何简单的方法来解码文本?是在存储数据之前解码它更好,还是在向用户显示它时解码它。

4

2 回答 2

1

URL 可以包含任何内容,但它应该被编码。在 Java 中,您可以使用URLEncoderandURLDecoder使用所需的字符编码对 url 进行编码和解码。

请记住,这些类实际上是用于 HTML 表单编码,但它们可以应用于 URL 的查询字符串(参数),因此不要在整个 URL 上使用它们 - 仅在参数上使用。

于 2010-05-02T09:38:44.320 回答
0

URI 规范 ( RFC 3986 ) 限制了可在 URI 中使用的字符(请参阅ABNF),并定义了用于传输“不安全”字符的百分比编码方案。正如Bozho 所说,URL 的查询部分通常按照 HTML 规范 ( application/x-www-form-urlencoded ) 进行编码。

App Engine的文档说:

App Engine 将 Java Servlet 标准用于 Web 应用程序。

因此,您可能应该让 Servlet API 为您解码参数。请参阅HttpServletRequest上的参数方法。这种编码通常应保留在视图层,因此数据将未编码存储。

如果您手动执行操作,请查看这篇关于 URI 中的字符处理的博文

于 2010-05-02T11:23:21.820 回答