Java 对 Unicode转义字符不会进行任何特殊的处理,只是简单的将其替换称相应的字符。
public static void main(String[] args) {
// \u000d System.out.println("hell world");
}
输出结果为:
hell world
其实原理就是大家熟悉的Unicode 编码,\u000d其实就是一个Unicode的转义字符,它所代表的是换行符。
java中的编译器,不仅会编译代码,还会解析Unicode 编码将它替换成对应的字符。
所以上面代码解析后实际是这样的:
public static void main(String[] args) {
//
System.out.println("hell world");
}
Unicode转义字符有啥用呢?当然是用来掩人耳目的,假设项目交接完成,客户后期使用项目不需要优化维护,那不久少赚一笔资金了吗?
正常代码如下这样写,客户稍微懂点代码,看一下就穿帮了。。。
public static void main(String[] args) throws InterruptedException {
//项目经理要求这里运行缓慢,好让客户给钱优化,并且得到明显的速度提升
Thread.sleep(3000);
System.out.println("延时执行........");
}
但是如果用Unicode 编码的转义符写的话,大部分人都觉的是一个注释或者一个乱码🐎:
public static void main(String[] args) throws InterruptedException {
//项目经理要求这里运行缓慢,好让客户给钱优化,并且得到明显的速度提升
// \u000d\u0054\u0068\u0072\u0065\u0061\u0064\u002e\u0073\u006c\u0065\u0065\u0070\u0028\u0033\u0030\u0030\u0030\u0029\u003b
System.out.println("延时执行........");
}
记得使用注释// 加上 \u000d换行符哦,😏😏😏😏😏😏
java中可以使用char类提供的charAt()方法来获得字符的unicode的转义字符,示例如下
public static void main(String[] args) {
System.out.println(getUnicode("Thread.sleep(" + "3000" + ");"));
}
/**
* 获取字符的unicode的转义字符
* @param source
* @return
*/
public static String getUnicode(String source) {
String returnUniCodeTemp = null;
String uniCodeTemp = null;
for (int i = 0; i < source.length(); i++) {
//使用char类的charAt()方法
uniCodeTemp = "\\u00" + Integer.toHexString((int) source.charAt(i));
returnUniCodeTemp = returnUniCodeTemp == null ? uniCodeTemp : returnUniCodeTemp + uniCodeTemp;
}
return returnUniCodeTemp;
}
输出结果:
\u0054\u0068\u0072\u0065\u0061\u0064\u002e\u0073\u006c\u0065\u0065\u0070\u0028\u0033\u0030\u0030\u0030\u0029\u003b