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

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

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

javascript中FineReport字符转换原理

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

点击(此处)折叠或打开

  1. function cjkEncode(text) {
  2. if (text == null) {
  3. return "";
  4. }
  5. var newText = "";
  6. for (var i = 0; i < text.length; i++) {
  7. var code = text.charCodeAt (i);
  8. if (code >= 128 || code == 91 || code == 93) {//91 is "[", 93 is "]".
  9. newText += "[" + code.toString(16) + "]";
  10. } else {
  11. newText += text.charAt(i);
  12. }
  13. }
  14. return newText;
  15. }

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

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

1、  对URL进行cjkEncode

点击(此处)折叠或打开

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

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

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

2、对Form表单进行cjkEncode

点击(此处)折叠或打开

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

3、特殊符号处理

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

点击(此处)折叠或打开

  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=GBK">
  4. <script type="text/javascript"    src="ReportServer?op=emb&resource=finereport.js"></script>
  5. <Script Language="JavaScript">
  6. function frOpen() {
  7. window.location=FR.cjkEncode("http://localhost:8075/WebReport/ReportServer?reportlet=doc/Primary/Parameter/Parameter.cpt&地区=") +encodeURIComponent(FR.cjkEncode("%华%"));
  8. }
  9. </Script>
  10. </head>
  11. <body>
  12. <input type="button" value="字符转换1" onclick="frOpen()">
  13. </body>
  14. </html>

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21472864/viewspace-2123320/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21472864/viewspace-2123320/

关于JS的编码转换问题相关推荐

  1. html unicode编码转换,JS实现的Unicode编码转换操作示例

    本文实例讲述了JS实现的Unicode编码转换操作.分享给大家供大家参考,具体如下: Unicode编码转换 /* *js Unicode编码转换 */ var decToHex = function ...

  2. oracle编码转换utf16,oracle编码转换:AL32UTF8-ZHS16GBK

    --修改Oracle数据库字符集为utf-8: SQL>conn / as sysdba; SQL>shutdown immediate; SQL>startup mount; SQ ...

  3. js javascript UTF-8 GB2312编码转换

    在用js做项目时,接收方是要用GB2312的汉字编码,而发送方用的是UTF-8汉字编码. 这里就要做汉字编码转换了. 网上找了一下午也没找到通用的方法,那只能自己做一个汉字编码对应表了. 关键是要自己 ...

  4. js将中文转换成编码 java解析_JS实现的汉字与Unicode码相互转化功能分析

    本文实例讲述了JS实现的汉字与Unicode码相互转化功能.分享给大家供大家参考,具体如下: 有时候,我们在给后端传递变量的的值中有汉字,可能由于编码的原因,传递到后端后变为乱码了.所以有时候为了省事 ...

  5. html js utf8编码转换器,用Javascript实现UTF8编码转换成gb2312编码

    //把编码转换成 gb2312编码 function UrlEncode(str) { var i, c, ret="", strSpecial="!\"#$% ...

  6. html用unicode编码转换汉字,汉字与Unicode编码相互转换(Js版)

    Unicode编码转换工具 //ASCII 转换 Unicode function AsciiToUnicode(){ if (document.getElementById("conten ...

  7. JS URL 编码 PHP 解码{%u5F00%u53D1}

    这次第一次用smarttemplate这个模板,比smarty小巧了很多,但也有些不方便的地方. smarty可以直接对url进行编码, 比如<!--{$var|urlencode}--> ...

  8. JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解...

    转:http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526687.html //该方法不会对 ASCII 字母和数字进行编码,也不会对 ...

  9. 原来浏览器原生支持JS Base64编码解码

    原来浏览器原生支持JS Base64编码解码 转载来源:https://www.zhangxinxu.com/wordpress/2018/08/js-base64-atob-btoa-encode- ...

最新文章

  1. Oracle 12c(12.1.0.5) oem agent silent install(静默安装agent)
  2. 启动 Tensorboard
  3. 小小知识点(十五)——origin pro 2018 安装和消除demo字样
  4. CRUD-员工列表 大体流程
  5. 持续5个月,200+笔记,3千多人参与,邀请你来学源码~
  6. 架构设计(2)---分布式架构的演进过程
  7. java gwt教程_GWT入门教程
  8. 设置IIS指向另一台机器上的共享
  9. 同样是百度输入法,定制远没有原版好用
  10. libiconv android编译,编译cBPM-android-19—CodeBlocks—CentOS7— ndk10—编译libiconv和xerces-c...
  11. java jshell_[Java JShell 指南] - 介绍
  12. php中的refresh,PHP mysqli_refresh() 函数用法及示例
  13. PHP学习之字符串操作
  14. DTL autoescape
  15. Python更新失败:SSL错误——Conda/Python
  16. 动态规划_(dynamic programming)_python_最大子序列(最长公共子序列)(可非连续子序列(several versions))
  17. Mysql基础知识01
  18. OpenVINO-yolov5推理代码
  19. DynamoDB 小结
  20. repr函数输出调试信息

热门文章

  1. 《中国综合算力指数》《中国算力白皮书》《中国存力白皮书》《中国运力白皮书》在首届算力大会上重磅发出
  2. 北方工业大学计算机考研资料汇总
  3. MATLAB裁剪视频(裁剪固定区域)
  4. poj2942点双连通奇圈-二分图判断Knights of the Round Table
  5. pro unity xl编程手册_施耐德Unity Pro XL编程使用入门
  6. html5多媒体播放器,走进HTML5-学习多媒体,带你实现视频播放器、音乐播放器功能(*^▽^*)...
  7. Python 下载 图片、音乐、视频 和 断点续传
  8. 手机文档怎样通过计算机打印,手机里的文件怎么快速打印出来?
  9. 固定于计算机主机箱中承载,计算机主机完整
  10. Cmake学习实战-基础篇