如何检测文本是否包含 [FSI]*[PDI]
How to detect if text contains [FSI]*[PDI]
Android Studio logcat 传入通知消息显示如下 []message[] .
我复制并粘贴到 .txt 文件,它显示 FSImessagePDI .
“FSI”和“PDI”这种字符是什么?我如何检测文本何时包含它们?
这些是用于双向文本和 显式方向隔离格式化字符 组的一部分的特殊 unicode 字符。它们在您的示例中用于轻松插入方向未知的文本片段。这可以通过将片段包装在 FSI 和 PDI 中来完成。有关详细信息,请咨询 Unicode Bidirectional Algorithm。
要检测它们,我们需要知道它们的 unicode 表示形式:
- 第一个强分离 (FSI) 由
0x2068
(UTF-16) 表示。
- 流行定向隔离 (PDI) 由
0x2069
(UTF-16) 表示。
现在我们可以使用正则表达式 \u2068(.*?)\u2069
来提取包装的内容:
String input = "Hi \u2068Bob\u2069!\nHow is \u2068Alice\u2069?";
System.out.println(input);
Pattern p = Pattern.compile("\u2068(.*?)\u2069");
Matcher m = p.matcher(input);
while (m.find()) {
System.out.println(m.group(1));
}
输出:
Android Studio logcat 传入通知消息显示如下 []message[] .
我复制并粘贴到 .txt 文件,它显示 FSImessagePDI .
“FSI”和“PDI”这种字符是什么?我如何检测文本何时包含它们?
这些是用于双向文本和 显式方向隔离格式化字符 组的一部分的特殊 unicode 字符。它们在您的示例中用于轻松插入方向未知的文本片段。这可以通过将片段包装在 FSI 和 PDI 中来完成。有关详细信息,请咨询 Unicode Bidirectional Algorithm。
要检测它们,我们需要知道它们的 unicode 表示形式:
- 第一个强分离 (FSI) 由
0x2068
(UTF-16) 表示。 - 流行定向隔离 (PDI) 由
0x2069
(UTF-16) 表示。
现在我们可以使用正则表达式 \u2068(.*?)\u2069
来提取包装的内容:
String input = "Hi \u2068Bob\u2069!\nHow is \u2068Alice\u2069?";
System.out.println(input);
Pattern p = Pattern.compile("\u2068(.*?)\u2069");
Matcher m = p.matcher(input);
while (m.find()) {
System.out.println(m.group(1));
}
输出: