【问题标题】:Additional Ascii char 'Â' added in JSP request在 JSP 请求中添加了额外的 Ascii char 'Â'
【发布时间】:2009-12-06 19:42:07
【问题描述】:

我在 tomcat 和 jsp 中面临同样的问题,如下面的 asp 问题中所列 Classic ASP gremlims, getting a  inserted into text whenever an HTML special character is used

使用 tomcat 5 和 jsp。当我输入一个包含 ±20°C 的字符串并提交给另一个 JSP 时,提交后的结果参数是 ±20°C。在请求本身的每个特殊字符之前都添加了一个附加字符 'Â'。我该如何解决这个问题?

谢谢,

【问题讨论】:

  • 如果是同一个问题,为什么要开一个新问题?

标签: java jsp httprequest extended-ascii


【解决方案1】:

这是由于将 UTF-8 页面显示为 Latin-1 造成的。例如,± 在 Latin-1 中编码为 0xB1,但在 UTF-8 中编码为 0xC2、0xB1。 0xC2 恰好是 Â。

这对于 JSP 页面来说有点奇怪。通常,JSP 将在 writer 和“Content-Type”标头中使用相同的编码,因此您始终获得相同的编码。检查您是否指定这样的编码,

<%@page pageEncoding="UTF-8" %>

如果您有自定义的“Content-Type”标头,请确保附加“, charset=UTF-8”。

【讨论】:

    【解决方案2】:

    这是 ISO-Latin 的症状 - 无论源数据在输出时都被转码为 UTF-8。检查您的字符编码。

    【讨论】:

      【解决方案3】:

      试试

      <%@ page pageEncoding="utf-8" %>
      

      request.setCharacterEncoding("utf-8");
      

      【讨论】:

        【解决方案4】:

        我遇到了类似的问题,现在似乎在更改

        块中的以下 行后已解决。
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        

        utf-8 很重要!

        希望对您有所帮助。

        【讨论】:

          【解决方案5】:

          直截了当:在涉及byte-char 转换的每个步骤中,您需要在各处指定相同且正确的字符编码。要覆盖世界上的任何人类角色,UTF-8 是一个完美的选择。

          指定此字符编码需要几个步骤:解析GET查询参数(可在应用服务器设置中配置)、解析POST请求正文(可借助过滤器配置)、写入响应流(可配置在 JSP 中的 @page pageEncoding 或 Servlet 中的 HttpServletResponse#setCharacterEncoding() 的帮助下),读/写数据库(可在 DB 表本身中配置),读/写文件(可使用 InputStreamReaderOutputStreamWriter 配置)。

          您可以在this article找到更详细的背景信息和完整的代码解决方案。

          希望这会有所帮助。

          【讨论】:

            猜你喜欢
            • 2017-12-27
            • 1970-01-01
            • 1970-01-01
            • 2013-09-13
            • 2017-08-21
            • 2018-07-11
            • 1970-01-01
            • 2021-06-24
            • 2017-02-24
            相关资源
            最近更新 更多