神秘的转义字符

・Java的转义字符有如下:

  \n 回车(\u000a)
  \t 水平制表符(\u0009)
  \b 空格(\u0008)
  \r 换行(\u000d)
  \f 换页(\u000c)
  \' 单引号(\u0027)
  \" 双引号(\u0022)
  \\ 反斜杠(\u005c)
  \ddd 三位八进制
  \udddd 四位十六进制

 

・史上最牛的 java 代码,代码如下:

\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0063\u006c\u0061\u0073\u0073\u0020\u0048\u0065\u006c\u006c\u006f\u0057\u006f\u0072\u006c\u0064\u0020\u007b\u0020\u0020\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0073\u0074\u0061\u0074\u0069\u0063\u0020\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0061\u0072\u0067\u0073\u0029\u0020\u007b\u0020\u0020\u0020\u0020\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064\u0020\u0021\u0022\u0029\u003b\u0020\u0020\u007d\u007d

猜猜这些东西能编译吗?如果可以会输出什么呢??嘿嘿。。酷吧?想知道结果就继续看。。


答案是能够编译,会打印 Hello World ! 。怎么样 很酷吧????想要运行就把那对字符拷贝下来,然后复制到一个名为 :HelloWorld.java的文件里。编译运行都OK。他代表的实际代码如下:

        public class HelloWorld {
            public static void main(String[] args) {
                  System.out.println("Hello World !");
            }
        }

如果你感到疑惑,现在就来讲解。那就是Java中的一个有趣的“毛病”。在编译之前先将所有的转义字符转换成它所表达的实际字符,也就有人发出狂想,写下了以上的代码。可以说上面的代码是把这种机制运用到了极致。

一般人是不会写这样的代码的,所以做了一个程序来将正常的代码转换成这样的代码。

 

import java.io.*;

public class HexCodeConverter {
  /**
   * 转换后 每个字符串的长度 一般十六进制用4位表示
   */
  public static final int CHAR_LENGTH = 4;
  /**
   * 根据参数进行转换,第一个参数是源文件名,第二个是目标文件名。
   * 如果使用相同的文件名则将源文件覆盖掉。
   * @param args String[]
   * @throws FileNotFoundException
   * @throws IOException
   */
  public static void main(String[] args) throws FileNotFoundException,
      IOException {
    if(args.length == 2){
      String sourceFile = args[0];
      String targetFile = args[1];
      File sf = new File(sourceFile);
      File tf = new File(targetFile);
      String src = HexCodeConverter.loadFromFile(sf);
      HexCodeConverter.saveToFile(tf,HexCodeConverter.convert(src));
    }
  }

  /**
   * 从指定的文件里读取所有的代码。
   * @param file File
   * @return String
   * @throws FileNotFoundException
   * @throws IOException
   */
  public static String loadFromFile(File file) throws
      FileNotFoundException, IOException {
    BufferedReader br = new BufferedReader(new FileReader(file));
    StringBuilder sb = new StringBuilder();
    while (true) {
      String line = br.readLine();
      if (line != null) {
        sb.append(line);
      }
      else {
        break;
      }
    }
    br.close();
    return sb.toString();
  }
  /**
   * 将源代码转换成用十六进制表示的字符序列
   * 例如: c 转换 成 \\u0063
   * @param source String
   * @return String
   */
  public static String convert(String source) {
    char[] sourceCodes = source.toCharArray();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < sourceCodes.length; i++) {
      String character = Integer.toHexString(sourceCodes[i]);
      StringBuilder charSB = new StringBuilder();
      int len = character.length();
      len = CHAR_LENGTH - len;
      for (int j = 0; j < len; j++) {
        charSB.append("0");
      }
      sb.append("\\u" + charSB.toString()+ character);
    }
    return sb.toString();
  }
  /**
   * 将代码字符串存储到指定的文件里
   * @param file File
   * @param codes String
   * @throws IOException
   */
  public static void saveToFile(File file, String codes) throws IOException {
    BufferedWriter bw = new BufferedWriter(new FileWriter(file, false));
    bw.write(codes);
    bw.flush();
    bw.close();
  }
}

 

Openbmc系列之自动化测试框架1 Openbmc作为当下BMC固件领域最流行的开源软件,具备从需求计划、开发、调试、测试、版本管理等完整的体系。在测试领域,Openbmc基于python的robotframework框架,实现Openbmc的自动化测试,为高效发布Openbmc版本提供有力支持。本文作为测试系列文档一,介绍Openbmc自动化测试虚拟Openbmc的环境搭建。 阅读详情

相关推荐

六轴机器人正解

采用的是John H.Craig在【机器人学导论】中的改进DH模型 1.六轴坐标系 2.DH参数 i αi−1\alpha_{i-1}αi−1​ ai−1a_{i-1}ai−1​ did_idi​ θi\theta_iθi​初值 1 0 0 0 0 2 -90 a1a_1a1​ 0 -90 3 0 a2a_2a2​ 0 -90 4 -90 a3a_3a3​ d4d...

m0_37581770的博客 2511

常用特殊字符

"\u0000","\u0001","\u0002","\u0003","\u0004","\u0005","\u0006","\u0007","\u0008", "\u000B","\u000C", "\u000E","\u000F","\u0010","\u0011","\u0012","\u0013","\u0014","\u0015","\u0016", "\u0017","\u0018","\u0019","\u001A","\u001B","\u001C","\...

Polumgla的博客 2万+

STM32F407控制舵机

STM32F407控制舵机运行 使用STM32F407控制舵机,首先来看下舵机图片 [黑红白,黑线接GND,红线接VCC,信号线接白色线(有的舵机线的颜色不同,例如褐色红色橘色,仅颜色不同接法还如上述)] 舵机需要信号的周期为20ms,即频率为50Hz。 接下来正式操作: 步骤一:STM32F4程序(本次程序的PWM信号产生的周期频率由定时器TIM14通道1产生(TIM14_CH1),想要使用其它定时器也没关系下面会讲到) #include "pwm.h" void TIM14_CH1_PWM_In

Ievn_Hare的博客 1万+

java注释的代码还会运行_什么?注释里面的代码居然能够执行

注释大家都写过,应该都懂。注释就是给人看的,不是给机器看的,自然也就无法执行。但是今天就有一个例外,快让我们看一下吧。如果是下面一段代码,大家期望的输出是什么?public class escapesUsage {public static void main(String[] args) {// \u000d System.out.println("www.flydean.com");}}mai...

weixin_39783633的博客 962

别再折腾端口了!Kali Nethunter Kex 图形化桌面连接失败的真正原因与一键修复(附Termux命令)

本文深入分析了Kali Nethunter Kex图形化桌面连接失败的真正原因,包括端口配置变更、依赖缺失和权限问题,并提供了一键修复方案和Termux命令。通过详细的诊断步骤和优化配置,帮助用户快速恢复Kex功能,提升移动安全测试效率。

weixin_42530732的博客 417

后台管理系统-7-vue3之引入配置文件baseURL

mock=false,本地模拟。mock=true,线上模拟。baseURL+url=实际请求的URL。get请求param参数,post请求data参数。

qq_20466211的博客 207

linux java main 参数_关于Java中的main方法的几种写法

Java中的main入口方法一般的入门书上都说只有一种固定的写法,但实际上可以有以下几种变种的写法,没有什么实际用处,纯属娱乐。1、main方法的一般写法public class TestMainMethod {public static void main(String[] args) {System.out.println("Hello,world!");}}2、可变参数的写法public c...

weixin_29496207的博客 510

【图像超分】论文复现:Pytorch实现ESPCN

论文精读:由于ESPCN没有公布源码,我们选择github上一个高star的项目来复现。准备数据集,以及数据预处理搭建网络模型设置参数并训练测试训练好的模型用训练好的模型测试自己的数据本文我们使用pycharm链接服务器训练。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1万+

最强特殊字符、表情符号、Unicdeo字符串处理

最强特殊字符、表情符号、Unicdeo字符串处理 处理效果: 将特殊字符、表情符号 替换成空格 Unicode编码字符串 转义 重音字符原样保留 /** * @param: str * @description: 处理可能包含unicode的字符串 * 如"?\u0006 \u0000\u0019\u0000\"" 这样含有这样错误的unicode的字符串是可以存入数据库,并导致乱码。 * 入参 ?\u0006 \u0000\u0019\u0000\" 返回

hello__word__的博客 2466

【项目实战】SOVD协议(面向服务的车辆诊断协议)

此外,AUTOSAR组织将SOVD部分内容的软件实现定义在了R22-11及以上版本的AUTOSAR Adaptive规范中,还支持动态发现车内诊断功能、获取高性能计算机(HPC)的Log信息等新的诊断需求,更符合当前软件定义汽车概念下的行业趋势。而SOVDGateway作为边缘节点,也肩负着对SOVD Client进行认证以及权限控制的责任,从而保证车辆的信息安全。相较于传统的UDS(Unified Diagnostic Services)协议,SOVD不仅保留了传统的读写数据、例程控制、故障读取等功能,

奶爸的编程之路,也就一周冷个三天 1903

第03章 Hermes Agent 核心原理

环境跑通之后,读者会很自然地想问:Hermes 的内部到底是怎么转起来的?为什么它能做到"越用越聪明"?长对话不会忘记上下文吗?这一章用尽量短的篇幅把核心原理讲清楚。理解原理不是为了纸上谈兵,而是为了在第7章实战时能判断"为什么 Hermes 这么响应"以及"我应该把哪类任务交给它"。

亢少军的博客 141

《C语言中的“神秘符号”:转义字符的奥秘》

《C语言中的“神秘符号”:转义字符的奥秘》

一名普通高校生 1294

基于反事实的因果推理Causal inference based on counterfactuals--一万六千字文献详细解读(因果关系的推理应用)【全文总结】

基于反事实的因果推理Causal inference based on counterfactuals--一万六千字文献详细解读(因果关系的推理应用)【全文总结】---来自一位即将入学的准研一,也希望这篇文章能够激励自己不断走下去!!

qq_46044325的博客 4442

webview 转义字符,为什么WebView.evaluateJavascript()删除转义字符?

I have a stringified JSON object that I want to pass into my WebView as a string. If my JSON string is a simple one-level JSON like this:JSONObject object = new JSONObject;object.put("key1", "val1");o...

weixin_29323977的博客 375

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

让python飞:形象理解python进制、字符串

Day02小鸭子探高台 一只小鸭子无家可归了,他走啊走啊,来到了小树造的小房子面前。小鸭叫了几声发现没人应答,所以就打算住在这里。他爬上树干,在门上方挂了一个牌子#小鸭之家#,两边各贴有一个华夫饼。牌子下面是一个小牌子,两边各有三只小精灵拉着。小牌子上写着小鸭来这里居住的原因。接着小鸭看到之前小树留下的红色的关键字,他看不懂就把字删掉了。 小鸭在门口向前望去,发现不远处有个非常雄伟的高台,高台四周有向上爬的石阶,有的石阶石用两块石板并行排列的,有的是用八块并列,还有的是十块、十六块的。但他们都向上延伸到台.

qq_44710986的博客 191

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Python路径那点事儿

劝退学习者的Python路径输入的小坑 我承认我比较懒,一般不喜欢写博客,但是,就在今天学习copyfile()的时候,由于接连踩了Python路径输入的几个小坑,浇灭了一天的好心情。经过不懈的努力,这些小怪兽终于得以解决。但在查找过程中,直接由报错信息引出的博客很多并不能指向答案,为了让和我一样的学习者少一点痛苦。我将学到的点进行了一个整理,希望能够帮到更多的人。(真的被这几个小坑整不会了……) Python的路径输入 在Windows下我们见到的路径一般是这样的: ‪D:\xxxx\xxxx\xxxx

qq_51895903的博客 676

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

告别乱码:详解C语言字符编码与转义字符

本文系统介绍了C语言中字符编码与字符串处理的核心知识。首先讲解了从ASCII到Unicode的字符编码演进,包括ASCII码表结构和扩展编码标准。随后详细解析了转义字符的使用方法、常见误区及八/十六进制表示。文章还深入探讨了C语言中的字符处理技术,包括char类型、字符串实现原理、中文字符处理和宽字符应用。针对常见中文乱码、转义字符误用等问题提供了解决方案,并附有实践案例。全文150字,涵盖编码理论、语言特性和实用技巧,为C语言文本处理提供了全面指导。

2503_92860243的博客 1254

由bext安装“异常”引出的话题:windows上转义字符的工作原理

由bext安装“异常”引出的话题:Windows上转义字符的工作原理,与ai“闲扯”不经意学习知识点。(笔记模板由python脚本于2024年07月25日 19:21:13创建,本篇笔记适合喜欢用ai学习的coder翻阅)【学习的细节是欢悦的历程】Python官网Free:大咖免费“圣经”教程python 完全自学教程,不仅仅是基础那么简单……自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。——华罗庚HOT。

m0_57158496的博客 2950

Mysql的转义字符

Mysql的转义字符是”\”,即反斜杠,在INSERT语句中,如果被插入的文本中包含反斜杠,那么反斜杠会被吃掉。例如: INSERT INTO tb (id,json) VALUES ('1','"person":"{\"name\":\"yp\",\"age\":\"25\"}"'); 插入后,数据库中的记录中不会有“\”出现,它神秘的消失了。 解决方法: 在插入之前将字符串中的"\"替换成:...

weixin_33828101的博客 353

手把手解密转义字符:代码世界里的“摩尔斯电码“(附多语言实战指南)

转义字符就像是程序员和编译器之间的暗号系统(想象成特工接头的那种!),用一个反斜杠告诉编译器:“嘿!后面这个字符不是字面意思,要特殊处理!转义字符就像代码世界里的调味料——用得好能提鲜,用错了整锅菜都毁啦!(别问我怎么知道的,都是泪 T_T)记住这些规则的同时,更要理解背后的原理。下次看到时,希望你能会心一笑:“小样儿,我早就看穿你了!

codecrafter123的博客 1155

【编程基础知识】Java语言中字面字符和转义字符的区别

【代码】【编程基础知识】Java语言中字面字符和转义字符的区别。

Dylaniou的博客 490

转义字符:程序员世界的摩尔斯电码(必看干货)

转义字符就像程序世界的交通信号灯,虽然不起眼,但少了它们代码就会乱套。下次看到反斜杠时,不妨多想一想:这个字符在说什么?它要带我们去往哪个神奇的代码世界?理解转义字符,就是理解计算机如何"阅读"代码的开始。

pythonpapaxia的博客 713

揭开正则表达式的神秘面纱

揭开正则表达式的神秘面纱 关闭高亮 [原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/regref.htm] 引言     正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征。     正则表达式可以用来:(1)验证字符串是否符合指定

Superxgl的专栏 462

php mysql 单引号转义_php中mysql转义字符函数语法_数据库_mysql转义字符_课课家

今天我们一起来解密数据库MySQL中的转义字符的实际应用,到底什么情况适合转义呢?我们今天主要描述的是php和MySQL转义字符,我们大家都知道php和MySQL转义字符的实际应用比例还是占为多数的,如果你对这一技术,心存好奇的话,以下的文章将会揭开它的神秘面纱。php和MySQL转义字符的详细研究,在设置文件中,有一项magicquotes,其默认是打开的,推荐是关闭。起初按照默认设置,以为这样...

weixin_36391993的博客 379
上一篇: Unicode的知识积累
下一篇: JDBC 各种驱动总结(比较全面)
fdsa4321
博客等级 码龄20年 2粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值