如何将 Unicode 字符作为 JSP/Servlet request.getParameter 传递?

2023-11-29

经过多次尝试和错误,我仍然无法找出问题所在。 JSP、Servlet 和数据库都设置为接受 UTF-8 编码,但即使如此,每当我对任何具有两字节字符(如破折号)的内容使用 request.getParameter 时,它们都会被打乱为损坏的字符。

我已经手动提交到数据库,它能够接受这些字符,没有问题。如果我从 servlet 中的数据库中提取文本并以 jsp 页面的形式打印它,那么它不会显示任何问题。

我唯一一次发现它以损坏字符的形式返回是当我尝试使用 request.getParameter 检索它后在其他地方显示它时。

有没有其他人有这个问题?我该如何修复它?


如果请求和/或响应编码根本没有正确设置,则可能会发生这种情况。

对于 GET 请求,您需要在 servlet 容器级别进行配置。目前尚不清楚您使用的是哪一个,但例如 Tomcat 是由URIEncoding属性在<Connector>其中的元素/conf/server.xml.

<Connector ... URIEncoding="UTF-8">

对于 POST 请求,您需要创建一个filter它映射到涵盖所有这些 POST 请求的所需 URL 模式。例如。*.jsp甚至/*。做好以下工作doFilter():

request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);

对于 HTML 响应和提交的 HTML 表单输入值的客户端编码,您需要设置 JSP 页面编码。将其添加到 JSP 的顶部(鉴于显示 UTF-8 直接形式 DB 工作正常,您可能已经正确完成了该操作)。

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

或者为了防止在每个 JSP 上复制粘贴此内容,请配置一次web.xml:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

对于源代码文件和stdout(IDE控制台),您需要设置IDE工作区编码。目前尚不清楚您使用的是哪一个,但对于示例 Eclipse,可以通过设置来完成窗口 > 首选项 > 常规 > 工作区 > 文本文件编码为 UTF-8。

enter image description here

请注意 HTML<meta http-equiv>标签是ignored当页面通过 HTTP 提供时。仅当通过本地磁盘文件系统打开页面时才考虑file://。还指定<form accept-charset>是不必要的,因为它已经默认使用在使用表单提供 HTML 页面期间使用的响应编码。也可以看看W3 HTML 规范.

也可以看看:

  • Unicode - 如何获得正确的字符?
  • 为什么 POST 不支持字符集,而 AJAX 请求则支持?雄猫6
  • HTML:表单不发送 UTF-8 格式输入
  • Servlet 应用程序中的 Unicode 字符显示为问号
  • 写入数据库时​​UTF-8编码错误(读取正常)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Unicode 字符作为 JSP/Servlet request.getParameter 传递? 的相关文章

  • struts 教程或示例

    我正在尝试在 Struts 中制作一个登录页面 这个想法是验证用户是否存在等 然后如果有错误 则返回到登录页面 错误显示为红色 典型的登录或任何表单页面验证 我想知道是否有人知道 Struts 中的错误管理教程 我正在专门寻找有关的教程 或
  • 如何将unicode文本转换为可读的utf8文本?

    我遇到了关于 Unicode 和 utf8 的严重问题 我将一段阿拉伯语 波斯语文本文件保存到记事本中并保存 现在我看到我的信息如下 我的问题是如何取回我的数据 取回这些数据对我来说很重要 提前致谢 该段落通过另存为代码页 1256 阿拉伯
  • Python unicode 字符代码?

    有没有办法将 Unicode 字符 插入 Python 3 中的字符串 例如 gt gt gt import unicode gt gt gt string This is a full block s unicode charcode U
  • 使用 HTTPServletRequestWrapper 包装请求参数

    我有一个可以验证 授权 REST 调用的过滤器 该过滤器需要访问请求参数 因此我为此编写了一个自定义 HTTPServletRequestWrapper import java util Collections import java ut
  • 有序 JSON 对象

    我有一个 servlet 它与数据库通信 然后返回有序 按时间排序 对象的列表 在servlet部分 我有 access DB returns a list of User objects ordered ArrayList users M
  • 我应该在密码中支持 Unicode 吗?

    我想允许我的用户使用 Unicode 作为密码 不过我发现很多网站不支持这一点 例如 Gmail Hotmail 所以我想知道是否有一些我忽略的技术或可用性问题 我在想 如果有什么问题的话 那一定是可用性问题 因为默认情况下 NET 接受
  • 如何区分哪些 unicode 字符是字母(单词)还是标点符号?

    我想检测文本中的单词 即我需要知道给定文本中的哪些字符是字母 即它们可以是 口语 单词的一部分 另一方面 哪些字符是标点符号等 例如 在上面的句子中 我 想要 和 i 和 e 是这方面的单词 而空格 和逗号则不是 这样做的困难在于我希望能够
  • 在 grails 中编写代理

    我正在使用 Gralis 1 3 7 我正在编写一个控制器 需要从另一台服务器获取 PDF 文件并将其返回给客户端 我想以某种相当有效的方式来做到这一点 例如 class DocController def view URL source
  • 单击链接时如何将另一个 JSP 页面注入到

    我在一个JSP页面中有两个不同的部分 其中一个包含链接菜单 单击时 div2 id content 会相应加载不同的页面 我正在做类似的事情 div ul class navbar li a href Login jsp Login a l
  • os.path.expanduser("~") 的替代方案?

    在Python 2 7 x中 os path expanduser Unicode 已损坏 这意味着如果 的扩展中包含非 ASCII 字符 则会出现异常 http bugs python org issue13207 http bugs p
  • Java如何区分这些具有相同名称/签名的多个方法?

    今天我在追踪一个错误 我注意到我们的一个班级中有一些奇怪的事情 我删除了尽可能多的代码并发布在这里 class A static int obtainNumber return 42 static int obtainNumber retu
  • Web 服务器和 servlet 容器之间的区别

    Web 服务器 和 Servlet 容器 有什么区别 一般来说 所有 Web 服务器也是 Servlet Web 容器 反之亦然吗 我一直在使用 Apache Tomcat for JSP 和 Apache for PHP 但无法弄清楚这两
  • 请求调度概念的包含和转发机制之间的区别?

    Forward 这可以通过 Request 两种方式完成 ServeletContext 将请求从 servlet 转发到另一个资源 servlet JSP 文件或 HTML 文件 在服务器上 转发完成于 服务器端 在客户端不知情的情况下
  • 使用 s:select 标签在下拉菜单中使用 i18n [重复]

    这个问题在这里已经有答案了 我的 JSP 页面中有一个下拉菜单 它是通过
  • 将 unicode 代码点转换为 UTF-8 的最简单方法

    在 C 中将 Unicode 代码点转换为 UTF 8 字节序列的最简单方法是什么 想到的唯一方法是使用iconv从 UTF 32LE 代码页映射到 UTF 8 但这似乎有点矫枉过正 Unicode 转换不是一个简单的任务 对我来说 使用
  • 在 Java Servlet 中上传文件

    我有一个 Java 动态 Web 项目 并且正在使用 TomCat v7 0 我是 Web 项目的新手 不太明白如何在我的 jsp 页面之一中上传文件 由于我的项目只是本地的 所以我认为我可以使用多部分形式 其中人们可以选择文件 并且这部分
  • Spring MVC 应用程序可以是多线程的,即使它的 servlet 不是吗?

    当您谈论 Spring 应用程序是多线程时 您是否一定是指该应用程序中定义的 servlet 是否是多线程的 或者即使应用程序中的 servlet 不是多线程 Spring 应用程序也可以配置为多线程吗 不再支持单线程 servlet 它们
  • 为什么ArrayList没有getSize()而不是size()?

    我在一些 JSP 页面中大量使用 ArrayList 我想像这样访问 ArrayList myArrayList size 但由于对象必须符合 JavaBean 标准 其中myArrayList getMyPropertyName is m
  • Enthought - matplotlib(plot()函数的问题)

    我正在尝试使用绘图库 http en wikipedia org wiki Matplotlib在冠层快车上 即使简单的代码也无法运行 注意 系统无法识别plot x 功能 好像有 ASCII X Unicode 的东西 我的计算机使用 U
  • 执行 mysqli->set_charset() 的永久方法?

    将我可以找到的字符集的所有配置文件和运行时选项设置为 utf 8 后 使用 php 建立的新 mysqli 连接的字符集仍然设置为 latin1 这实际上意味着我必须调用 mysqli gt set charset utf8 每次我连接 m

随机推荐