app开发历程————服务器端生成JSON格式数据,采用Unicode编码,隐藏中文

今天,问以前的同事,他们写接口按什么编码,怎么看到有\u的一些看不懂的内容,一问,原来是信息隐藏,防止信息泄漏。

然后在网上查了Java如何把中文转换成unicode编码,转自:http://blog.csdn.net/sunmenggmail/article/details/27539023

  1 package mobi.chenwei.wing.util;
  2
  3 public class CharacterSetToolkit {
  4
  5     /**
  6      * @param args
  7      */
  8     public static void main(String[] args) {
  9         // TODO Auto-generated method stub
 10         String s = "天津";
 11         System.out.println("Original:\t\t" + s);
 12
 13           s = toEncodedUnicode(s, true);
 14             System.out.println("to unicode:\t\t" + s);
 15
 16
 17             s = fromEncodedUnicode(s.toCharArray(), 0, s.length());
 18             System.out.println("from unicode:\t" + s);
 19
 20
 21     }
 22     private static final char[] hexDigit = { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘A‘,
 23         ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘ };
 24
 25 private static char toHex(int nibble) {
 26     return hexDigit[(nibble & 0xF)];
 27 }
 28 /**
 29  * 将字符串编码成 Unicode 形式的字符串. 如 "黄" to "\u9EC4"
 30  * Converts unicodes to encoded \\uxxxx and escapes
 31  * special characters with a preceding slash
 32  *
 33  * @param theString
 34  *        待转换成Unicode编码的字符串。
 35  * @param escapeSpace
 36  *        是否忽略空格,为true时在空格后面是否加个反斜杠。
 37  * @return 返回转换后Unicode编码的字符串。
 38  */
 39 public static String toEncodedUnicode(String theString, boolean escapeSpace) {
 40     int len = theString.length();
 41     int bufLen = len * 2;
 42     if (bufLen < 0) {
 43         bufLen = Integer.MAX_VALUE;
 44     }
 45     StringBuffer outBuffer = new StringBuffer(bufLen);
 46
 47     for (int x = 0; x < len; x++) {
 48         char aChar = theString.charAt(x);
 49         // Handle common case first, selecting largest block that
 50         // avoids the specials below
 51         if ((aChar > 61) && (aChar < 127)) {
 52             if (aChar == ‘\\‘) {
 53                 outBuffer.append(‘\\‘);
 54                 outBuffer.append(‘\\‘);
 55                 continue;
 56             }
 57             outBuffer.append(aChar);
 58             continue;
 59         }
 60
 61         switch (aChar) {
 62         case ‘ ‘:
 63             if (x == 0 || escapeSpace) outBuffer.append(‘\\‘);
 64             outBuffer.append(‘ ‘);
 65             break;
 66         case ‘\t‘:
 67             outBuffer.append(‘\\‘);
 68             outBuffer.append(‘t‘);
 69             break;
 70         case ‘\n‘:
 71             outBuffer.append(‘\\‘);
 72             outBuffer.append(‘n‘);
 73             break;
 74         case ‘\r‘:
 75             outBuffer.append(‘\\‘);
 76             outBuffer.append(‘r‘);
 77             break;
 78         case ‘\f‘:
 79             outBuffer.append(‘\\‘);
 80             outBuffer.append(‘f‘);
 81             break;
 82         case ‘=‘: // Fall through
 83         case ‘:‘: // Fall through
 84         case ‘#‘: // Fall through
 85         case ‘!‘:
 86             outBuffer.append(‘\\‘);
 87             outBuffer.append(aChar);
 88             break;
 89         default:
 90             if ((aChar < 0x0020) || (aChar > 0x007e)) {
 91                 // 每个unicode有16位,每四位对应的16进制从高位保存到低位
 92                 outBuffer.append(‘\\‘);
 93                 outBuffer.append(‘u‘);
 94                 outBuffer.append(toHex((aChar >> 12) & 0xF));
 95                 outBuffer.append(toHex((aChar >> 8) & 0xF));
 96                 outBuffer.append(toHex((aChar >> 4) & 0xF));
 97                 outBuffer.append(toHex(aChar & 0xF));
 98             } else {
 99                 outBuffer.append(aChar);
100             }
101         }
102     }
103     return outBuffer.toString();
104 }
105
106 /**
107  * 从 Unicode 形式的字符串转换成对应的编码的特殊字符串。 如 "\u9EC4" to "黄".
108  * Converts encoded \\uxxxx to unicode chars
109  * and changes special saved chars to their original forms
110  *
111  * @param in
112  *        Unicode编码的字符数组。
113  * @param off
114  *        转换的起始偏移量。
115  * @param len
116  *        转换的字符长度。
117  * @param convtBuf
118  *        转换的缓存字符数组。
119  * @return 完成转换,返回编码前的特殊字符串。
120  */
121 public static String fromEncodedUnicode(char[] in, int off, int len) {
122     char aChar;
123     char[] out = new char[len]; // 只短不长
124     int outLen = 0;
125     int end = off + len;
126
127     while (off < end) {
128         aChar = in[off++];
129         if (aChar == ‘\\‘) {
130             aChar = in[off++];
131             if (aChar == ‘u‘) {
132                 // Read the xxxx
133                 int value = 0;
134                 for (int i = 0; i < 4; i++) {
135                     aChar = in[off++];
136                     switch (aChar) {
137                     case ‘0‘:
138                     case ‘1‘:
139                     case ‘2‘:
140                     case ‘3‘:
141                     case ‘4‘:
142                     case ‘5‘:
143                     case ‘6‘:
144                     case ‘7‘:
145                     case ‘8‘:
146                     case ‘9‘:
147                         value = (value << 4) + aChar - ‘0‘;
148                         break;
149                     case ‘a‘:
150                     case ‘b‘:
151                     case ‘c‘:
152                     case ‘d‘:
153                     case ‘e‘:
154                     case ‘f‘:
155                         value = (value << 4) + 10 + aChar - ‘a‘;
156                         break;
157                     case ‘A‘:
158                     case ‘B‘:
159                     case ‘C‘:
160                     case ‘D‘:
161                     case ‘E‘:
162                     case ‘F‘:
163                         value = (value << 4) + 10 + aChar - ‘A‘;
164                         break;
165                     default:
166                         throw new IllegalArgumentException("Malformed \\uxxxx encoding.");
167                     }
168                 }
169                 out[outLen++] = (char) value;
170             } else {
171                 if (aChar == ‘t‘) {
172                     aChar = ‘\t‘;
173                 } else if (aChar == ‘r‘) {
174                     aChar = ‘\r‘;
175                 } else if (aChar == ‘n‘) {
176                     aChar = ‘\n‘;
177                 } else if (aChar == ‘f‘) {
178                     aChar = ‘\f‘;
179                 }
180                 out[outLen++] = aChar;
181             }
182         } else {
183             out[outLen++] = (char) aChar;
184         }
185     }
186     return new String(out, 0, outLen);
187 }
188 }  

运行结果:

Original: 天津
to unicode: \u5929\u6D25
from unicode: 天津

这时候,我们在写接口时,希望把中文进入这个方法中进行隐藏。

人生总是有许多事情是徒劳的,但是不要因为徒劳,而不去做这件事情,挖掘自己的潜力。

时间: 2024-08-07 14:25:14

app开发历程————服务器端生成JSON格式数据,采用Unicode编码,隐藏中文的相关文章

Java Servlet生成Json格式数据

Java Servlet生成Json格式数据 分类: Web JAVA2013-09-17 14:38 4805人阅读 评论(1) 收藏 举报 在Servlet中覆写doGet方法,是用JSONStringer 类: [java] view plaincopyprint? protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 

如何使用fastJson来解析JSON格式数据和生成JSON格式数据

由于项目用到了JSON格式的数据,在网上搜索到了阿里的fastjson比较好用,特此记录fastjson用法,以备以后查询之用. decode: 首先创建一个JSON解析类: public class JsonParser { private int devid; public int getDevid() { return devid; } public void setDevid(int devid) { this.devid = devid; } } 在需要用到解析的地方创建一个对应的对象

在VS2013下编译json-c库,并简单生成json格式数据

#include "stdafx.h"#include "json-c/json.h" int _tmain(int argc, _TCHAR* argv[]){ // 正常的json格式 json_object *json = json_object_new_object(); json_object_object_add(json, "name", json_object_new_string("laomeng")); j

iOS开发之JSON格式数据的生成与解析

本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据?  JSON格式取代了xml给网络传输带来了很大的便利,但是却没有了xml的一目了然,尤其是json数据很长的时候,我们会陷入繁琐复杂的数据节点查找中.这时我们就需要一款在线校验工具 BeJson. 一.JSON是什么? JSON(JavaScript Object Notation) 是一种轻量级的

fastJson java后台转换json格式数据

什么事JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等

java后台对json格式数据的解析

Json 和 Jsonlib 的使用 什么是 Json JSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成.它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一个子集. JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族

Android上解析Json格式数据

package com.practice.json; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class JsonDemo extends Activity { /*http://www.hui

使用getJSON()异步请求服务器返回json格式数据

我们可以使用jquery的getJSON()方法请求服务器返回json格式数据: js代码: function test(){ $.getJSON("JsonServlet",function(result){ alert(result.name); }); } 服务器端servlet响应: @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletEx

解析JSON格式数据

 别想一下造出大海,必须先由小河川开始. 本讲内容:解析JSON格式数据 1)比起XML,JSON的主要优势在于它的体积更小,在网络上传输的时候可以更省流量.但缺点在于,它的语义性较差,看起来不如XML直观. 2)解析JSON格式的数据有多种方式,常用的两种是:使用官方提供的JSONObject和谷歌的开源库GSON. 示例一:解析服务器返回的数据 一.JSONObject解析方式 步骤: 1.在服务器中定义一个JSONArray,并将服务器返回的数据传入到JSONArray对象中 2.循环