【问题标题】:Bash: Convert non-ASCII characters to ASCIIBash:将非 ASCII 字符转换为 ASCII
【发布时间】:2010-12-30 19:26:39
【问题描述】:

如何使用 Bash 将 Žvaigždės aukštybėj užgesäüöÖÜÄ 等字符串分别转换为 Zvaigzdes aukstybej uzgesauoOUA

基本上我只想转换所有不在拉丁字母表中的字符。

谢谢

【问题讨论】:

    标签: bash ascii


    【解决方案1】:

    根据您的机器,您可以尝试将您的字符串通过管道

    iconv -f utf-8 -t ascii//translit
    

    (或者无论你的编码是什么,如果它不是 utf-8)

    【讨论】:

      【解决方案2】:

      你也许可以使用 iconv。

      例如字符串:

      Žvaigždės aukštybėj užges 或 äüöÖÜÄ

      在文件testutf8.txt,utf8格式。

      运行命令:

      iconv -f UTF8 -t US-ASCII//TRANSLIT testutf8.txt

      结果:

      Zvaigzdes aukstybej uzges 或 auoOUA

      【讨论】:

        【解决方案3】:
        echo Hej på dig, du den dära | iconv -f utf-8 -t us-ascii//TRANSLIT
        

        给予:

        Hej pa dig, du den dara
        

        【讨论】:

          【解决方案4】:

          您也可以使用python库unidecode来执行此操作:

          $ echo "Žvaigždės aukštybėj užges äüöÖÜÄ" | unidecode
          

          输出:

          Zvaigzdes aukstybej uzges auoOUA
          

          请参阅this post 了解其他方法。

          【讨论】:

            【解决方案5】:
             try {
                    String name = "Žvaigždės aukštybėj užges ";
                    String s1 = Normalizer.normalize(name, Normalizer.Form.NFKD);
                    String regex = "[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+";
            
                    String s2 = new String(s1.replaceAll(regex, "").getBytes("ascii"), "ascii");
            
                } catch (UnsupportedEncodingException e) {
                }
            

            【讨论】:

            • 很容易批评这一点,但是一个新手付出了努力,被喊了下来,现在已经离开了。 [慢拍..] 如果没有 iconv,我们该怎么办?
            • @geotheory: ...而且其他答案也不像纯 bash。它们都依赖于外部可执行文件。这个答案真正需要的是编译 java 文件并从 bash 运行它的指令。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-10-21
            • 1970-01-01
            • 2011-06-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-04
            相关资源
            最近更新 更多