14 unicode jsp servlets character-encoding mojibake
经过大量的反复试验,我仍然无法弄清楚问题.JSP,servlet和数据库都被设置为接受UTF-8编码,但即使我在任何具有任何双字节字符的东西上使用request.getParameter,如em dash,它们也会被破坏为字符.
我已经手动提交数据库,它能够接受这些字符,没问题.如果我从servlet中的数据库中提取文本并将其打印在我的jsp页面的表单中,则显示没有问题.
唯一一次,当我尝试在使用request.getParameter检索它之后尝试将其显示在其他地方时,它发现它作为已损坏的字符返回.
有没有其他人有这个问题?我该如何解决?
Bal*_*usC 21
如果根本没有正确设置请求和/或响应编码,则会发生这种情况.
对于GET请求,您需要在servletcontainer级别配置它.目前还不清楚你正在使用哪一个,但是对于示例Tomcat来说,要通过其中URIEncoding的<Connector>元素属性来完成/conf/server.xml.
<Connector ... URIEncoding="UTF-8">
Run Code Online (Sandbox Code Playgroud)
对于POST请求,您需要创建一个过滤器,该过滤器映射到涵盖所有POST请求的所需URL模式.例如*.jsp甚至是/*.做以下工作doFilter():
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
Run Code Online (Sandbox Code Playgroud)
对于提交的HTML表单输入值的HTML响应和客户端编码,您需要设置JSP页面编码.将它添加到JSP的顶部(鉴于显示UTF-8直表DB的工作正常,你可能已经正确地完成了它).
<%@page pageEncoding="UTF-8" %>
Run Code Online (Sandbox Code Playgroud)
或者为了防止在每个JSP上进行复制,请将其配置为web.xml:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
Run Code Online (Sandbox Code Playgroud)
对于源代码文件和stdout(IDE控制台),您需要设置IDE工作区编码.目前还不清楚你正在使用哪一个,但在示例Eclipse中,可以通过将Window> Preferences> General> Workspace> Text File Encoding设置为UTF-8来完成.
请注意,通过HTTP提供页面时,<meta http-equiv>将忽略 HTML 标记.仅在从本地磁盘文件系统打开页面时才考虑它file://.同样指定<form accept-charset>是不必要的,因为它已经默认为在使用表单提供HTML页面期间使用的响应编码.另请参阅W3 HTML规范.
| 归档时间: |
|
| 查看次数: |
8126 次 |
| 最近记录: |