JBoss升级后,前端框架字符处理出现了乱码的解决方案之一

发布时间 2023-08-16 14:35:31作者: 怀珑斋狐言

背景:MVC项目,JBoss从6.3升级至7.1,使用Velocity前端框架。

问题:在使用Ajax进行处理时,发现传递到后端的字符串汉字变成了乱码,疑似环境切换问题,JBoss默认编码没有进行调整。

然而由于这个项目服务器不在自己手里,也无法调整默认编码(一般是ISO8859-1,需要调整为UTF-8),所以只能更改思路,在前端将字符串用encodeURIComponent()函数处理一遍,然后再传递到后端。

生成乱码的范例:

function exFunction() {
target = {
//定义省略
}
}

function badCode() {
var genDate = apiInstance.getUploadDataGram();
if (genDate == null) {
cFlag = 'N';
message = "message!";
layer.open({
content: message,
btn: '确定'
});
return false;
}
genDate = jQuery.base64.encode(genDate);
exFunction();
//target为exFunction函数生成的某对象或字符串,包含汉字
loading_control.start();
dw.ajax({
type: "POST",
url: "./myMethod",

//直接使用JSON.stringify函数,导致乱码
data: "json=" + JSON.stringify(target)

调整之后:

//添加全局变量
var targetString;

function exFunction() {
target = {
//定义省略
}

//生成对象后先用stringify函数处理一下,再在Ajax传值时用encodeURIComponent处理
targetString = JSON.stringify(target);
}

function currentCode() {
var genDate = apiInstance.getUploadDataGram();
if (genDate == null) {
cFlag = 'N';
message = "message!";
layer.open({
content: message,
btn: '确定'
});
return false;
}
exFunction();
loading_control.start();
dw.ajax({
type: "POST",
url: "./myMethod",
data: "json=" + encodeURIComponent(targetString)