如何将越南文本转换为普通文本?

时间:2016-05-05 12:42:04

标签: java android

我有这样的越南文:

$tableNames = array_filter($tables, function($var) {
        return substr($var, 0, 2) == 'M_';
});

我想将其转换为普通文本。我期望的结果:

<a data-toggle="modal" data-backdrop="static" href='#modal-add-contact' class='btn'>View Info</a>

我该怎么做?感谢。

3 个答案:

答案 0 :(得分:5)

您正在java.text.Normalizer中寻找Normalizer 。它允许您在重音的Unicode字符及其分解之间进行映射:
它基本上将所有重音字符转换为deAccented对应字符,然后将它们组合成变音符号。现在你可以使用正则表达式去除变音符号。

        public static void main(String[] args) {

            System.out.println(deAccent("Xin chào Việt Nam"));
        }

        public static String deAccent(String str) {
            String nfdNormalizedString = Normalizer.normalize(str, Normalizer.Form.NFD); 
            Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
            return pattern.matcher(nfdNormalizedString).replaceAll("");
        }

答案 1 :(得分:1)

对于那些正在寻找的人:

    public String toKhongDau(String str) {
    try {
        String temp = Normalizer.normalize(str, Normalizer.Form.NFD);
        Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
        return pattern.matcher(temp).replaceAll("").toLowerCase().replaceAll(" ", "-").replaceAll("đ", "d");
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return "";
}

答案 2 :(得分:0)

我认为最好的解决方案是将每个字符转换为十六进制并用另一个十六进制替换。这是因为有2种Unicode类型:

  1. 复合Unicode
  2. 合成的Unicode

例如,Composite Unicode编写的“Ồ”与Precomposed Unicode编写的“Ồ”不同。您可以复制我的示例字符并将其转换以查看区别。

  • Composite Unicode中,“Ồ”由2个字符组成:ÔU+00d4) 和̀U+0300
  • Precomposed Unicode中,“Ồ”是单个字符 (U+1ED2

我已经为某些银行开发了此功能,以便在将信息发送到核心银行之前转换信息(通常不支持Unicode),并且当最终用户使用多种Unicode类型输入数据时会遇到此问题。因此,我认为转换为十六进制并替换它是最可靠的方法。