js中加密解密时中文符号乱码
Posted 尔嵘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中加密解密时中文符号乱码相关的知识,希望对你有一定的参考价值。
原先加密解密定义方法请看:JavaScript自定义实现字符串加密和解密
上面的方法会导致后台给前端返回名称类的字符串中带中文符号时,页面渲染的会有乱码的情况存在,如何解决这一问题呢,发现利用以下几种方法都不太行:
1.encodeURIComponent:
decodeURIComponent(encodeURIComponent("中文字符串(12()!@;;)"))
2.encodeURI
最终,不得不考虑更换编码解码的代码,demo如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>网页加密及解密</title>
<meta name="author" content="xiongzaiqiren" />
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta name="generator" content="ClassBao team coding in July 10, 2017" />
</head>
<body>
<p><textarea id="text1" name="textfield" cols="50" rows="5">钱庄王员外这个人怎么样?</textarea></p>
<input type="button" name="Button1" value="加密" onClick="text1.value = MySign.Encrypt(text1.value);">
<input type="button" name="Button2" value="解密" onClick="text1.value = MySign.UnEncrypt(text1.value);">
<script language="javascript">
/**加密 */
function toCode(Text) {
let output = '',
alterText = new Array(),
varCost = new Array(),
TextSize = Text.length;
for (var i = 0; i < TextSize; i++) {
let idea = Math.round(Math.random() * 111) + 77;
alterText[i] = Text.charCodeAt(i) + idea;
varCost[i] = idea;
}
for (var i = 0; i < TextSize; i++) {
output += String.fromCharCode(alterText[i], varCost[i]);
}
//text1.value = output;
return output;
}
/**解密 */
function fromCode(Text) {
let output = '', alterText1 = new Array(), varCost1 = new Array(), TextSize = Text.length;
for (var i = 0; i < TextSize; i++) {
alterText1[i] = Text.charCodeAt(i);
varCost1[i] = Text.charCodeAt(i + 1);
}
for (var i = 0; i < TextSize; i = i + 2) {
output += String.fromCharCode(alterText1[i] - varCost1[i]);
}
//text1.value = output;
return output;
}
let str1 = "你好(玛丽190cm+)";
console.log(str1);
let str2 = toCode(str1);
console.log("str2",str2);
let str3 = fromCode(str2);
console.log("str3",str3);
</script>
</body>
</html>
以上是关于js中加密解密时中文符号乱码的主要内容,如果未能解决你的问题,请参考以下文章
基于 jspdf.js 库生成 PDF 文件时中文乱码问题的解决