Java - 字符串和Unicode互转 - 解析小米pm.min.js
小米JS地址:
http://p.www.xiaomi.com/zt/20130313/huodong/pm.min.js
上面这个JS是小米抢手机页面的代码。和抢手机有直接关联。。
虽然我3次都没抢到红米手机,但是今天偶尔发现这么一个js文件,对文件内容比较好奇,但是这个js开头有个数组,部分截图如下:
开始这么一大堆的16进制字符串,这种类型的数据经常会在properties文件中看到,为了看到实际的内容,写了如下代码进行翻译。
最简单的方式,只要把上面的代码,贴到浏览器(如chrome的console中),就可以看到还原的文字。
另一种java方式,实现很简单,因为看到上面的\x,首先想到的是16进制,看到\u首先想到的是unicode,看如下完整代码:
public class UnicodeHex {
public static String decode(String str) {
if(str==null||str.trim().equals("")){
return "";
}
String[] ss = str.split("\\\\");
int i = 0, j = 0;
int length = ss.length;
char[] cs = new char[length];
for (; i < ss.length; i++) {
if (!ss[i].trim().equals("")) {
cs[j] = (char) (Integer.valueOf(ss[i].substring(1), 16).intValue());
j++;
}
}
return new String(cs);
}
public static String encode(String str){
if(str==null||str.trim().equals("")){
return "";
}
StringBuffer sb = new StringBuffer();
char c;
for(int i=0;i<str.length();i++){
c = str.charAt(i);
if(c > 256){
sb.append("\\u");
}
else {
sb.append("\\x");
}
sb.append(Integer.toHexString(c));
}
return sb.toString();
}
public static void main(String[] args) throws Exception {
String str = "\\x3c\\x2f\\x69\\x6e\\x73\\x3e\\u5c0f\\u65f6\\x3c\\x69\\x6e\\x73\\x3e";
System.out.println(decode(str));
String ss = "</ins>小时<ins>";
System.out.println(encode(ss));
System.out.println(str);
}
}
使用decode解析上面的字符串,使用encode转换为上述字符串。
小米这段代码都有什么呢,看如下部分内容(使用chrome,和上面java代码执行结果一样):
这段代码中,最明显的应该就是:
http://tc.hd.xiaomi.com/hdget?callback=hdcontrol&_=
这段代码在后续点击按钮时,发送的请求就是这个。
小米抢手机,好像是在服务器上限制了几百个线程,如果你正好抢到一个线程,你就进入了。如果抢不到,服务器返回一个503错误。
小米每次的请求地址都不一样,如果在抢手机之前可以获得请求的字符串,也许就可以抢先别人获得线程...至于是否可行,就等下周二试试了。
Java - 字符串和Unicode互转 - 解析小米pm.min.js的更多相关文章
- java字符串和unicode互转
直接上代码 private static String decodeUnicode(String input) { if (null == input) return input; int len = ...
- Java字符串与日期互转
Java字符串与日期的相互转换 1.字符串转日期 字符串的格式与日期的格式一定要对应,并且字符串格式可以比日期格式多,但不能少,数字大小不自动计算日期.其中需要主要大小写 年yyyy 月MM 日dd ...
- java 字符串中参数化符号${}的解析
我们在很多地方都能看到代表参数意义的符号${},可能我们在写一些框架的时候,有时候也需要用到这个符号,但他们是如何精确解析的?或者说需要我们自已写的时候,如何写?我们先来看以下的几个场景: 1.字符串 ...
- java字符串大小写字母互改
import java.util.Scanner; public class Test { /** * 测试数据 * * @param args */ public static void main( ...
- java 中文与unicode互转
public class FontUtil { public static void main(String[] args) { System.out.println(chinaToUnicode(& ...
- java笔记 -- java字符串
概念: Java字符串就是Unicode字符序列, Java没有内置的字符串类型, 而是在标准Java类库中提供了一个预定义类. 每个用双引号括起来的字符串都是String类的一个实例.String ...
- 浅谈Java字符串
从概念上而言,Java字符串就是Unicode字符序列.由于Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类String,每个用双引号的括起来的字符串都是String类的一个实 ...
- Java 字符串简介
从概念上讲,Java 字符串就是 Unicode 字符序列.Java 没有内置的字符串类型,而是在标准 Java 类库中提供了一个预定义类,很自然地叫做 String.每个用双引号括起来的字符串都是 ...
- java字符串应用之表达式解析器
一.表达式的组成 1.数字 2.运算符:+ - / * ^ % = 3.圆括号 4.变量二.运算符优先级 由高到低分别为:+-(正负号).^.*/%.+-.= 优先 ...
随机推荐
- ZRender源码分析2:Storage(Model层)
回顾 上一篇请移步:zrender源码分析1:总体结构 本篇进行ZRender的MVC结构中的M进行分析 总体理解 上篇说到,Storage负责MVC层中的Model,也就是模型,对于zrender来 ...
- 程序员都会的 35 个 jQuery 小技巧
收集的35个 jQuery 小技巧/代码片段,可以帮你快速开发. 1. 禁止右键点击 $(document).ready(function(){ $(document).bind("cont ...
- Python之路第八天,进阶-设计模式
设计模式 单例模式 单例,顾名思义单个实例. 学习单例之前,首先来回顾下面向对象的内容: python的面向对象由两个非常重要的两个"东西"组成:类.实例 面向对象场景一: 如:创 ...
- 定义#define
定义符号常量 当我们不止一次用到某个符号常量时,常选择对符号变量进行定义,这样就能当成一般常量来用. ...
- 字符串水题(hdoj1049)
Problem Description Password security is a tricky thing. Users prefer simple passwords that are easy ...
- python学习day9
目录 一.队列 二.生产者消费者模型 三.协程 四.select\poll\epoll 五.paramiko 六.mysql API调用 一.队列(queue) 队列分以下三种: class queu ...
- js跑马灯效果
function nextPage() { /* 克隆第一张图片并添加到box后 box前移一张图片的距离动画 动画回调里把box的 ...
- Repeated meta-data items
B.2 Generating your own meta-data using the annotation processor You can easily generate your own co ...
- 深入理解MFC子类化
子类化,通俗来讲就是用自己的窗口处理函数来处理特定消息,并将自己其他消息还给标准(默认)窗口处理函数.在SDK中,通过SetWindowLong来指定一个自定义窗口处理函数:SetWindowLong ...
- POJ 动态规划题目列表
]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322 ...