• pushlet 传递中文问题


    好多示例只是示例,没有说这个问题,既然发现了,我就就地解决一下!

    我的方法很简单,对要传送的内容进行编码!

    Java后台和JS前台都有包装的编解码方法,可以直接使用看效果!

    后台编码(解码自己搞):

    Java代码 复制代码 收藏代码
    1. package com;   
    2. import java.net.URLEncoder;   
    3. import java.text.SimpleDateFormat;   
    4. import java.util.Date;   
    5. import nl.justobjects.pushlet.core.Event;   
    6. import nl.justobjects.pushlet.core.EventPullSource;   
    7. public class HelloWorldPlushlet {      
    8.     static public class HwPlushlet extends EventPullSource {   
    9.         // 休眠五秒   
    10.         @Override  
    11.         protected long getSleepTime() {   
    12.             return 2000;   
    13.         }   
    14.         @SuppressWarnings("deprecation")   
    15.         @Override  
    16.         protected Event pullEvent() {   
    17.             Event event = Event.createDataEvent("/cuige/he");   
    18.             try {   
    19.                 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
    20.                 String text = format.format(new Date());                   
    21.                 String str = "传递中文测试!" + text + "!";   
    22.                 str = URLEncoder.encode(str,"UTF-8");   
    23.                 event.setField("cnmess", str);   
    24.             } catch (Exception e) {   
    25.                 event.setField("mess""异常错误!");   
    26.             }   
    27.             return event;   
    28.         }   
    29.     }   
    30. }  
    package com;
    import java.net.URLEncoder;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import nl.justobjects.pushlet.core.Event;
    import nl.justobjects.pushlet.core.EventPullSource;
    public class HelloWorldPlushlet {	
    	static public class HwPlushlet extends EventPullSource {
    		// 休眠五秒
    		@Override
    		protected long getSleepTime() {
    			return 2000;
    		}
    		@SuppressWarnings("deprecation")
    		@Override
    		protected Event pullEvent() {
    			Event event = Event.createDataEvent("/cuige/he");
    			try {
    				SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    				String text = format.format(new Date());				
    				String str = "传递中文测试!" + text + "!";
    				str = URLEncoder.encode(str,"UTF-8");
    				event.setField("cnmess", str);
    			} catch (Exception e) {
    				event.setField("mess", "异常错误!");
    			}
    			return event;
    		}
    	}
    }

     URLEncoder.encode有两个方法,一个参数的两个参数的,由于一个参数的已经不建议使用,所以这里使用了两个参数的方法!

    至于编码方式,这个由所在系统约定,这里使用UTF-8编码!加上个时间戳看效果!

    前台解码(JS也可以编码,自己搞):

    Java代码 复制代码 收藏代码
    1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>   
    2. <html>   
    3.     <head>   
    4.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   
    5.         <meta http-equiv="Pragma" content="no-cache" />   
    6.         <script type="text/javascript" src="ajax-pushlet-client.js"></script>          
    7.         <script type="text/javascript">   
    8.             PL._init();    
    9.             PL.joinListen('/cuige/he');   
    10.             function onData(event) {    
    11.                 document.getElementById("mess").innerHTML=decodeURIComponent(event.get("cnmess"));   
    12.             }   
    13.         </script>   
    14.     </head>   
    15.     <body>   
    16.         <center>   
    17.         <h1>   
    18.             my first pushlet!   
    19.         </h1>   
    20.         <br><br><br>   
    21.         <div id="mess"></div>   
    22.         </center>   
    23.     </body>   
    24. </html>  
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <html>
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    		<meta http-equiv="Pragma" content="no-cache" />
    		<script type="text/javascript" src="ajax-pushlet-client.js"></script>		
    		<script type="text/javascript">
    			PL._init(); 
    			PL.joinListen('/cuige/he');
    			function onData(event) { 
    				document.getElementById("mess").innerHTML=decodeURIComponent(event.get("cnmess"));
    			}
    		</script>
    	</head>
    	<body>
    		<center>
    		<h1>
    			my first pushlet!
    		</h1>
    		<br><br><br>
    		<div id="mess"></div>
    		</center>
    	</body>
    </html>

    直接使用decodeURIComponent方法进行解码!

    当然JS中编解码方式方法很多,不是这里所述重点不再啰嗦!

    如果不解码会看到内容:

    Java代码 复制代码 收藏代码
    1. %E4%BC%A0%E9%80%92%E4%B8%AD%E6%96%87%E6%B5%8B%E8%AF%95%EF%BC%812012-10-08+11%3A38%3A02%EF%BC%81  
    %E4%BC%A0%E9%80%92%E4%B8%AD%E6%96%87%E6%B5%8B%E8%AF%95%EF%BC%812012-10-08+11%3A38%3A02%EF%BC%81

    你绝对认识的,至于值的对应关系,参考http://www.w3school.com.cn/tags/html_ref_urlencode.html !

    如果解码后会看到应该看到的汉字:

    Java代码 复制代码 收藏代码
    1. 传递中文测试!2012-10-08+11:39:34!  
    传递中文测试!2012-10-08+11:39:34!

    如果不没有采取任何方式而直接使用网上的示例进行开发,一旦有中文的话就会出现消息不能推送的问题!

    而且观察后台打印会发现,回话一旦传递中文,传递一次后回话就会被移除!

  • 相关阅读:
    sql server紧急状态下登录脚本
    将SQL for xml path('')中转义的字符正常显示
    SQL查询表中的有那些索引
    Set ARITHABORT Option设置为ON
    检测重编译
    计划指南
    sql server 清理缓存
    变量绑定
    分析及动态采样
    Hint
  • 原文地址:https://www.cnblogs.com/LLLONG/p/3115830.html
Copyright © 2020-2023  润新知