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中加密解密时中文符号乱码的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat:3DES解密时中文乱码

基于 jspdf.js 库生成 PDF 文件时中文乱码问题的解决

基于 jspdf.js 库生成 PDF 文件时中文乱码问题的解决

如何解决android studio 运行时中文乱码的问题

Python:mac下解决绘图时中文乱码问题

python:mac下解决绘图时中文乱码问题