【问题标题】:How to convert utf8 signed string to unsigned string or char[] (in Java)如何将 utf8 有符号字符串转换为无符号字符串或 char[](在 Java 中)
【发布时间】:2013-03-22 03:26:18
【问题描述】:

我有一个这样的签名字符串:“Làm sao để chuyển chuổi có dấu về không dấu?”

我想把它翻译成这样的字符串:“Lam sao de chuyen chuoi co dau ve khong dau?”

请告诉我用Java代码解决它的方法。 非常感谢!

【问题讨论】:

    标签: utf-8 char


    【解决方案1】:

    类似

    public static void main(String args[]) {
        String src = "Làm sao để chuyển chuổi có dấu về không dấu?";
    
        String dest = Normalizer.normalize(src, Normalizer.Form.NFD);
        dest = dest.replaceAll("[^\\p{ASCII}]", "");
    
        System.out.println(src);
        System.out.println(dest);
    }
    

    给你

    Làm sao để chuyển chuổi có dấu về không dấu?

    Lam sao e chuyen chuoi co dau ve khong dau?

    【讨论】:

    • 我刚刚注意到这并不能完全满足您的要求:để 已被截断为 e。
    • 看来问题没那么简单:这里有一个类似的问题stackoverflow.com/questions/2362810/…
    • 是的,这不简单。但非常感谢乔纳森,我会听从你的建议。 :)
    • 你能解释一下这个字符“[^\\p{ASCII}]”的含义吗?
    • replaceAll 采用正则表达式,您可以在此处查看详细信息:docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/… - 这是匹配任何非 ASCII 字符的意思。对 Normalizer.normalize 的调用将带重音的字符分解为单独的 ASCII 字符 + Unicode 组合重音字符,因此当我们过滤掉非 ASCII 时,我们几乎得到了我们想要的字符串。除了 đ 似乎没有替代的 ASCII+组合重音表示,所以我们最终将它完全删除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    相关资源
    最近更新 更多