首页 > 解决方案 > 假设我有一个 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 行的输出中没有按预期分解。

标签: java

解决方案



推荐阅读