![](/img/trans.png)
[英]How to encode unicode characters like \u0022 and \u005c (\ and ") in a Java string?
[英]converting string of unicode “\u0063” into “c”
我正在做一些密码分析作业,并试图编写执行a + b = c的代码。 我的想法是使用unicode。 b +(ba)= c。 问题是我的代码返回了c的unicode值而不是字符串“ c”,并且我无法将其转换。
请问有人可以解释下面称为unicode的字符串与称为test和test2的字符串之间的区别吗? 还有什么办法可以使字符串unicodeOfC打印“ c”?
//this calculates the unicode value for c
String unicodeOfC = ("\\u" + Integer.toHexString('b'+('b'-'a') | 0x10000).substring(1));
//this prints \u0063
System.out.println(unicodeOfC);
String test = "\u0063";
//this prints c
System.out.println(test);
//this is false
System.out.println(test.equals(unicodeOfC));
String test2 = "\u0063";
//this is true
System.out.println(test.equals(test2));
test
和test2
之间没有区别。 它们都是引用同一个String
String
文字 。 此String
文字由unicode转义符组成 。
用于Java编程语言的编译器(“ Java编译器”)首先识别其输入中的Unicode转义, 将ASCII字符
\\u\u003c/code>紧跟其后的四个十六进制数字转换为UTF-16代码单元(第3.1节)以表示所指示的十六进制值
,并且传递所有其他字符不变。
因此,编译器将转换此unicode转义并将其转换为相应的UTF-16代码单元。 也就是说,Unicode转义
\c
转换为字符c
。
在这个
String unicodeOfC = ("\\u" + Integer.toHexString('b'+('b'-'a') | 0x10000).substring(1));
String
文字"\\\\u\u0026quot;
(使用\\
字符转义\\
字符)的运行时值为\\u\u003c/code> ,即。
两个字符
\\
和u
。 该String
与调用toHexString(..)
的结果连接在一起。 然后,您在结果String
上调用substring
String
并将其结果分配给unicodeOfC
。 因此, String
值为\c
,即。 的6个字符\\
, u
, 0
, 0
, 6
,和3
。
还有什么办法可以使字符串
unicodeOfC
打印“ c”?
与创建方式类似,您需要获取unicode转义的数字部分,
String numerical = unicodeOfC.replace("\\u", "");
int val = Integer.parseInt(numerical, 16);
System.out.println((char) val);
然后可以将其打印出来。
我认为您不了解字符串转义的工作原理。
在Java中,反斜杠是转义字符,它允许您在字符串中使用字符,例如换行符\\n
,制表符\\t
或unicode \c
。
假设我正在编写代码,并且需要打印换行符。 我会这样做System.out.println("\\n");
现在说我想显示一个反斜杠, System.out.println("\\");
将是一个编译错误,但System.out.println("\\\\");
将打印\\
。
因此,您的第一个字符串是打印文字反斜杠字符,然后是字母u,然后是十六进制数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.