`

关于JS的编码转换问题

阅读更多

在进行JS开发过程中,尤其是在开发报表时,报表已集成到Web页面中,通过在页面传递参数至报表中时,会发现有时某些参数值,传递到报表中是显示为问号或乱码等等一系列不能正常显示的情况。

这是由于浏览器和报表服务器的编码不同,字符多次进行编码转换时出现错误导致字符的显示出现乱码,尤其是中日韩文和特殊字符更容易出现乱码问题。

以开发报表软件FineReport为例,在给报表服务器发送请求之前,对URL或者只对URL里面的参数名字和参数值,进行cjkEncode的编码,该方式兼容了各种不同的字符集,如ISO8859-1、 UTF-8、 GBK、 ENU_JP,尤其对中日韩文的处理采取了统一的方案。

javascript中FineReport字符转换原理

在给报表服务器发送请求之前,对URL或者只对URL里面的参数名字和参数值,进行cjkEncode的编码。源码如下:

 

function cjkEncode(text) {     
	if (text == null) {     
		return "";     
	}     
	var newText = "";     
	for (var i = 0; i < text.length; i++) {     
		var code = text.charCodeAt (i);      
		if (code >= 128 || code == 91 || code == 93) {//91 is "[", 93 is "]".     
			newText += "[" + code.toString(16) + "]";     
		} else {     
			newText += text.charAt(i);     
		}     
	}     
	return newText;     
}

 

 

经过编码的URL或者Form表单,报表服务器智能的将这些字符正确的转换过来。

cjkEncode方法在FineReport的JS库中已经预先提供了,用户只要加载了FR的JS库,就可以使用FR.cjkEncode对中日韩文字符进行encode,如下示例:

1、  对URL进行cjkEncode

 

 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<script type="text/javascript"	src="ReportServer?op=emb&resource=finereport.js"></script>
<Script Language="JavaScript">             
function frOpen() {   
	window.location=FR.cjkEncode("http://localhost:8075/WebReport/ReportServer?reportlet=doc/Primary/Parameter/Parameter.cpt&地区=华东");       
}       
</Script>
</head>
<body>
<input type="button" value="字符转换1" onclick="frOpen()">
</body>
</html>

 

如果只对参数值进行编辑转换,在参数后面调用FR.cjkEncode()方法,如:

window.location="http://localhost:8075/WebReport/ReportServer?reportlet=reportname.cpt¶name="+FR.cjkEncode("华东"); 

2、对Form表单进行cjkEncode

 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<script type="text/javascript" src="/WebReport/ReportServer?op=emb&resource=finereport.js"></script>
<script>
function autoSubmit() {
	var Region1 = document.getElementById('Region');     //获取到参数Region所在文本框
	Region1.value = FR.cjkEncode(Region.value);         //对值参数值进行编码转化
	Region1.name = FR.cjkEncode("地区");               //对参数控件名编码转换,如果参数名字为英文,则不需要此操作
	document.FRform.submit();
}
</script>
<body>
<form name=FRform method=post action="/WebReport/ReportServer?reportlet=doc/Primary/Parameter/Parameter.cpt">
<input type="text" id="Region" name="地区" value="华东">
<input type="button" name="show" value= "查看" onclick="autoSubmit()"/>
</body>
</html>

 

 

3、特殊符号处理

如果在需要进行cjkEncode的URI的参数中包含特殊字符,比如%,#,$,=,&,/,?,+,@等字符时,需要在cjkEncode之后,再次调用javascript的encodeURIComponent对这些特殊字符进行编码。如参数值是”%华%“这样的字符,就需要写成encodeURIComponent(FR.cjkEncode("%华%")),一定要先进行cjkEncode,然后再进行encodeURIComponent,完整代码如下:

 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<script type="text/javascript"	src="ReportServer?op=emb&resource=finereport.js"></script>
<Script Language="JavaScript">             
function frOpen() {   
window.location=FR.cjkEncode("http://localhost:8075/WebReport/ReportServer?reportlet=doc/Primary/Parameter/Parameter.cpt&地区=") +encodeURIComponent(FR.cjkEncode("%华%"));      
	}       
</Script>
</head>
<body>
<input type="button" value="字符转换1" onclick="frOpen()">
</body>
</html>
1
0
分享到:
评论

相关推荐

    JS实现URL编码转换中文

    ### JS实现URL编码转换中文 在Web开发过程中,经常需要处理URL中的特殊字符,特别是中文字符。由于URL传输限制及浏览器解析原因,中文等非ASCII字符需要被编码为特定格式才能在网络上传输。本文将详细介绍如何使用...

    易语言JS实现编码转换源码

    在本案例中,我们讨论的主题是利用易语言来实现JavaScript(JS)编码转换的源码。JavaScript是一种广泛应用于Web开发的脚本语言,它在处理字符串编码时扮演着重要角色,尤其是在处理不同字符集和编码格式之间转换时...

    js的encodeUri编码转换为GBK问题

    在博文《js的encodeUri编码转换为GBK问题》中,作者可能讨论了如何实现这个转换过程。`GBKUrl.js`这个文件很可能是用来处理GBK编码到URI编码转换的工具脚本。这个脚本可能包含以下功能: 1. 使用`TextDecoder`来...

    Node.js-iconv-lite-纯javascript转换字符编码

    `iconv-lite` 是一个纯 JavaScript 实现的字符编码转换库,它不需要任何 C++ 扩展,因此可以在包括 Windows、Linux、Mac OS X 在内的各种平台上无缝工作。这个库主要设计用于解决 Node.js 应用程序在处理多语言或多...

    JS实现编码转换.rar

    综上所述,JS实现编码转换涉及到了JavaScript的字符串处理、Unicode编码以及可能的第三方库使用。在实际项目中,要充分理解各种编码标准,熟练掌握相关的API和工具,以便在多语言环境下保证数据的正确传输和显示。...

    mac文件编码转换

    以下是一些关于Mac文件编码转换的知识点: 1. **内置工具:TextEdit** - Mac的默认文本编辑器TextEdit具有更改文本编码的功能。打开文件后,选择“格式”&gt;“编码”&gt;“以其他编码打开”,然后选择所需的编码。 2. ...

    易语言源码易语言JS实现编码转换源码.rar

    在"易语言源码易语言JS实现编码转换源码.rar"这个压缩包中,我们找到了一个关于易语言与JavaScript(JS)之间进行编码转换的源码实现。这种编码转换在处理不同字符集和编码格式的数据时非常关键,尤其是在处理多国...

    url编码转换器

    使用“url编码转换器”这样的工具,用户可以便捷地处理URL中的编码问题,无论是手动输入的链接还是程序生成的链接,都能确保其在传输过程中不会因为特殊字符而引起问题。在开发网页应用或者处理HTTP请求时,理解并...

    易语言JS实现编码转换

    易语言JS实现编码转换源码,JS实现编码转换,decodeURI,encodeURI

    Quoted-printable 编码介绍、Quoted-printable编码解码转换方法

    Quoted-printable编码的数据可以通过以下的伪代码函数进行编码转换: ```pseudo function quoted_printable_encode($string){ return preg_replace('/[^\r\n]{73}[^=\r\n]{2}/', "$0=\r\n", str_replace("%", "=",...

    EncodeDecode & ANSI-UTF8编码转换工具

    "EncodeDecode & ANSI-UTF8编码转换工具"是一款专门用于解决这个问题的软件,它能够帮助用户将文本数据从ANSI编码转换为UTF-8编码,反之亦然。这两种编码方式在不同的上下文中有各自的适用性,理解它们的差异和用途...

    易语言JS实现编码转换源码.7z

    当你看到“易语言JS实现编码转换源码”时,可以理解为这是一个使用易语言编写的程序,该程序的功能是处理JavaScript中的字符编码转换问题。 在编程中,编码转换是一个非常关键的环节,尤其是在处理多国语言或者跨...

    js unicode 转换工具

    在JS中,Unicode转换主要涉及到字符串的编码和解码。 1. Unicode编码: - `\u`转义序列:在JavaScript中,我们可以使用`\u`后跟四位十六进制数字来表示Unicode字符,例如`\u0041`代表大写字母'A'。 - `String....

    编码转换convertz8.02

    标签中的“js”表明这个转换工具可能包含了JavaScript实现的部分,JavaScript是一种广泛用于Web开发的脚本语言,可以用于客户端的交互逻辑,例如在浏览器中进行编码转换。这可能意味着convertz8.02提供了JavaScript...

    字符编码转换类,支持 ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom互相转换

    但是,如果你需要一个类来处理多种编码转换,可能需要编写自定义代码或者使用第三方库,如压缩包中的"CharsetConv"。 "CharsetConv"类可能包含了以下功能: - 检测字符串的当前编码 - 将字符串从ANSI转换为Unicode...

    字符编码转换 convert unicode to Shift-JIS

    各类编码转换,从unicode 到 Shift-JIS

    文件编码转换工具源码

    此工具的功能如下,目前仅能在windows平台...1、支持UTF8、Unicode、GB2312编码普通文本文件任意转换 2、支持UTF8、Unicode、GB2312编码html文件任意转换 3、支持对文件进行Base64编码 4、支持对Base64编码文件进行解码

    JavaScript实现Base64编码转换

    简介 Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个...当然,你也可以将图片、文本和音视频转换成二进制序列,再然后转换为Base64编码。我们这里讨论的是如何将二进制转换

    文件编码批量转换工具(不用积分)

    如:我要转换E盘下 E:\work_architecture\doc目录下的所有js 和 css 文件 编码为 utf-8 那么,你要执行的命令就是 java -jar code_conversion.jar "E:\work_architecture\doc" "utf-8" ".js .css" 还是挺简单的吧~~...

    中文转换成十六进制编码

    总之,将中文字符转换为十六进制编码是一个实用的操作,它可以帮助我们更好地理解字符在计算机内部的存储方式,以及解决跨平台、跨编码的兼容性问题。通过熟练掌握这一技能,可以提升我们在处理字符编码问题时的效率...

Global site tag (gtag.js) - Google Analytics