JSP、JQuery和Javascript的字符集编码问题
Charset encoding problems with JSP, JQuery and Javascript
我在基于web的应用程序中遇到了一些字符集编码问题。尽管我已经正确配置了页面编码,但特殊字符仍被截断。
我使用JQuery Easy UI插件来完成大部分工作,但这个问题也出现在简单的JQuery/Javascript代码中,例如警报框中。
JSP页面标题:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%> <!-- "ISO-8859-1" -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
(...)
jQuery代码:
$.fn.altStatusTarefa =
function (idStat, idTar){
var motivo =prompt("Informe o motivo da alteração:",
"(Descrição suscinta)");
if (motivo!=null && motivo!="")
{
var result = $.post("TarefaUpdateStatus", {
idTarefa : idTar,
idStatus : idStat,
motivoAlt : motivo
}
);
result.done(function( data ) {
$.messager.show({
title:'Sucesso',
msg:'A alteração foi processada. ' +
'Tecle F5 para atualizar o formulário.',
showType:'show'
});
});
result.fail(function(jqXHR, textStatus) {
$.messager.alert('Erro',
'Houve um problema na atualização: ' +
textStatus,'error');
});
result.always({
});
}
else{
alert("Alteração cancelada.");
}
};
所有这些特殊字符(ã、ç、é等)在运行时都会被截断。
对可能发生的事情或解决方案有什么想法吗?谢谢
在搜索响应的过程中,我终于找到了一个解决方案。
首先,为了实现entyre应用程序的正确解析,我的问题通过三个步骤得到了解决:
-
将Eclipse中的所有.js文件转换为UTF-8字符集(不是默认值)。在Eclipse中,右键单击.js文件-属性-资源-字符集编码区-选择UTF-8;之后,文件中的所有特殊字符都应该被截断。它们必须被替换为新的(可能在某个地方有自动转换功能,可以随意研究);它解决了Mojibake在每个外部javascript代码中处理字符的问题,比如"alerts"(JSP页面中的脚本做得很好)。
-
所有使用
response.getWritter().write("...")
的响应都应该使用response.setCharacterEncoding("UTF-8")
进行编码;您也可以使用@BalusC
在另一个答案中所写的过滤器。例如,它通过jQuery Easy UI Messager插件解决了消息传递方面的问题。 -
从数据库中检索到的数据(请确保您的数据库也使用UTF-8!)正在由Spring管理的控制器通过JSON(Gson)对实现jQuery Easy UI DataGrid插件的数据进行编码。在这种情况下,您应该在
@RequestMapping
Spring注释中使用语句produces={"application/json; charset=UTF-8"}
,正如Jensen在本问题中所描述的那样。
请注意,我在这个答案中没有谈到数据插入,即相反的数据流,只是因为它没有影响我的系统(它已经配置好了)。但你可能会发现,jQuery Easy UI上有一些功能可以做到这一点,就像请求设置一样。
我几乎写了一篇教程,因为这个非常奇怪的问题让我困扰了两天,我真的希望能帮助其他人(尤其是那些处理非英语语言的人)不要对这些东西感到无聊。对@BalusC的宝贵帮助表示问候。
编辑:这篇文章对字符集编码非常有用。
在URL TarefaUpdateStatus
后面的servlet中,在获取第一个请求参数之前执行以下调用:
request.setCharacterEncoding("UTF-8");
更好的是,在映射到/*
的URL模式上的servlet过滤器中完成这项工作,这样您就不需要在所有servlet上复制粘贴这一行。如果您碰巧使用Spring,它的库中就有这样一个过滤器。
这一行将告诉servlet容器使用UTF-8来解码URL编码的POST请求参数。否则,它将使用容器的默认字符集,通常是ISO-8859-1,这只会导致这些参数值最终出现在Mojibake中。
请注意,这不包括GET请求参数。这需要在servlet容器端进行配置。
另请参阅:
- Unicode-如何正确输入字符
- 将地理编码结果转换为php变量以发布到mysql数据库
- Json在完整日历中对数据进行了编码
- 用有限的字符集压缩字符串,然后在JS中解压缩
- 如何对每个用户每天只允许单击一次的按钮进行编码
- Javascript字符集编码
- 如何在javascript转换编码中将一个动态值从一个表单添加到另一个页面
- base64编码的图像比intranet中的常规图像好吗
- 我不知道我的编码有什么问题.(JavaScript)
- 为什么字符编码对URL很重要
- 如何在做PHP时在base64中动态编码;preg_ replace”;
- 如何将JSON编码的PHP数组发送到同一页面上的数据表
- 如何使Jquery编码的动态下拉菜单与PHP GET变量协调工作
- 使用javascript小部件对php进行字符集编码
- 如何在Javascript上更改字符串的编码/字符集
- JSP、JQuery和Javascript的字符集编码问题
- 转义HTML标记.字符集编码可能出现的任何问题
- Javascript根据所需的字符集(编码)验证用户输入
- 字符编码- Javascript字符集问题
- GBK编码/解码字符集
- 编码字符集有问题