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.变量二.运算符优先级 由高到低分别为:+-(正负号).^.*/%.+-.= 优先 ...
随机推荐
- php 代码重用
<?php /* 21.php * 代码重用 * include() required()载入文件 * include() 如果载入文件不存在,提示警告,还可以继续执行 * required() ...
- 如何测试一个U盘
功能测试: 1 在windows xp比较流行的操作系统上是否可以识别(装了驱动后是否可以) 2 在电脑上显示的盘符是否正确 3 总空间,可用空间,已用空间是否显示正确 4 u盘中是否可以拷入各种格式 ...
- NFC通信的模式选择
原帖请参照:http://www.nfcchina.org/forum.php?mod=viewthread&tid=68&extra=page%3D1 1.nfc 怎么选择操作模式的 ...
- 【Xamarin挖墙脚系列:Xamarin正式发布了IOS的模拟器在Windows下】
xamarin 的发展越来越迅速.如果还感觉这玩意儿是个鸡肋,辣么请跟的上时代吧 . (额,对微软产品有严重偏见的请绕行..............其实你可以看看.net 基金会现有的开源项目再说不开 ...
- thrift TNonblockingServer 使用
下载 0.9.1 版本 (0.9.2需要 2.5的bison,而 RHEL6上自带bison是2.4) TNonblockingServer 时必须使用 TFramedTransport ,不能使 ...
- Java泛型介绍!!!
Java总结篇系列:Java泛型 转自:http://www.cnblogs.com/lwbqqyumidi/p/3837629.html 一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下 ...
- word2vec 入门基础(一)
一.基本概念 word2vec是Google在2013年开源的一个工具,核心思想是将词表征映 射为对应的实数向量. 目前采用的模型有一下两种 CBOW(Continuous Bag-Of-Words, ...
- 谈谈 WLST Custom Commands
在了解WLST定制命令之前,简单说一下WLST,WLST 全称叫Weblogic Scripting Tool, 它提供了一组预定义命令来方便Weblogic的用户通过命令行对Weblogic 实例, ...
- 使用StoryBoard设置Scrollview的横向滚动不用一行代码
1).创建一个空工程Single类型的工程,然后打开故事版(StoryBoard)在ViewController上添加scrollview 2).然后对scrollview添加约束,上下左右全部都是0 ...
- CSS实现限制字数功能
<div style="width:200px; white-space:nowrap;overflow:hidden;text-overflow:ellipsis; border:1 ...