【问题标题】:Decoding international chars in AppEngine在 AppEngine 中解码国际字符
【发布时间】:2010-05-02 09:17:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: java google-app-engine urldecode


    【解决方案1】:

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

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

    【讨论】:

    • 得到了一些问号,而不是 %-codes。但我应该能够以某种方式解决这个问题。感谢您的帮助!
    • 对于其他有我问题的人:我通过使用 ISO-8859-1 解码使其工作。由于某种原因,UTF-8 不起作用。
    • URL 的内容编码取决于浏览器,以及包含 URL 或表单的页面的编码。尝试将包含表单的页面显式提供为 UTF-8。 ISO-8859-1 可能会解决您眼前的问题,但会使用户无法使用绝大多数 unicode 字符。
    【解决方案2】:

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

    doc for App Engine 说:

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

    因此,您应该让 Servlet API 为您解码参数。参看HttpServletRequest上的参数方法。这种编码一般应该保留在视图层,所以数据会以未编码的形式存储。

    如果您手动操作,请查看this blog post on character handling in URIs

    【讨论】:

    • 遇到了另一个问题,但这真的很有帮助。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    相关资源
    最近更新 更多