前段时间看到群友聊天,使用特殊的昵称能够让文字的顺序发生变化。我把昵称复制到 IDEA 里面,发现包含一个显示为 RLI 的字符。在网上查询之后,发现是 Unicode 为显示双向文本提供的一个特殊字符,功能是将之后的文本视为独立的从右到左的顺序。还有其他特殊的格式化字符,以及用于解析这些字符并正确显示文本顺序的 Unicode 双向算法。
1 | print(";(" |
上面的文本在浏览器中会显示为 print("");
,因为在第一个引号之后有一个 RLI 字符。如果在之后添加文字:
1 | print(";("Hello World! |
则会显示为 print("!Hello World");
,具体的显示方式和双向算法的实现有关。介绍 Unicode 双向算法的两个网站:UNICODE BIDIRECTIONAL ALGORITHM,Unicode Bidirectional Algorithm basics。