小写的 unicodes
是 U+0073 ,这个网站说它是\u0073
用 C 和 Java 编写的。
给定一个文件:a.txt
包含:
http://www.example.com/\u0073
让我们用 Java 阅读这个,然后取消转义\
,看看我们得到了什么:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.apache.commons.lang3.StringEscapeUtils;
public class Main {
public static void main(String[] args) throws IOException {
String s2 = new String(Files.readAllBytes(Paths.get("a.txt")));
System.out.println(s2); // prints http://www.example.com/\u0073
String s3 = org.apache.commons.lang3.StringEscapeUtils.unescapeJava(s2);
System.out.println(s3); // prints http://www.example.com/s
}
}
输出是:
$ java -cp ./commons-lang3-3.4.jar:. Main
http://www.example.com/\u0073
http://www.example.com/s
unescapeJava(s2)
方法调用从文件中\\u0073
获取 并转义到\u0073
,然后打印为“s”。
我们可以在 Haskell 中做同样的事情吗?
让我们使用文本库来使用这两个文件:
Prelude > a <- Data.Text.IO.readFile "a.txt"
Prelude > a
"http://www.example.com/\\u0073\n"
在 Haskell中自动翻译 from \u0073
to的任何期望都可能被执行此类期望的而不是前缀s
混淆:\x
\u
Prelude> "\x0073"
"s"
那么如何unescapeJava(..)
在 apace-common-lang 中采用方法,并在 Haskell 中复制其功能以从\\u0073
to 开始\u0073
,并将其打印为“s”?