java - 假设我有一个 NFD 文本,我该如何重新组合它
问题描述
假设给了我一个NFD(规范化表格 D(规范分解))文本,我将如何重新组合它。换句话说,如果我有"แก ้ว"
,那么我希望它重新组合回"แก้ว"
。以下java代码不这样做。
import java.io.BufferedReader; // [01]
import java.io.FileReader; // [02]
import java.io.PrintWriter; // [03]
import java.text.Normalizer; // [04]
// [05]
public class RecomposeNFD { // [06]
public static void main(String args[]) throws Exception { // [07]
BufferedReader reader = new BufferedReader(new FileReader("input.txt")); // [08]
PrintWriter writer = new PrintWriter("output.txt"); // [09]
String line = null; // [10]
while ((line = reader.readLine()) != null) { // [11]
String nfd = Normalizer.normalize(line, Normalizer.Form.NFD); // [12]
String recompose = Normalizer.normalize(nfd, Normalizer.Form.NFC); // [13]
writer.println(line + "_" + nfd + "_" + recompose); // [14]
} // [15]
writer.close(); // [16]
reader.close(); // [17]
} // [18]
} // [19]
对于input.txt
(UTF-8) 的
あ
แก้ว
แก ้ว
使用以下命令
javac RecomposeNFD.java
java -Dfile.encoding=UTF-8 RecomposeNFD
给出以下输出:
线 | 实际输出 | 预期产出 | 旗帜 |
---|---|---|---|
1 | あ_あ_あ</td> | あ_あ_あ</td> | 正如预期的那样 |
2 | แก้ว_แก้ว_แก้ว | แก้ว_แก ้ว_แก้ว | 不如预期 (第二个元素) |
3 | แก ้ว_แก ้ว_แก ้ว | แก ้ว_แก ้ว_แก้ว | 不如预期 (第三个元素) |
当我创建这个测试代码时,我发现它Normalizer.normalize(line, Normalizer.Form.NFD);
在第 3 行的输出中没有按预期分解。