从字符串中删除所有非ASCII

时间:2012-02-26 17:51:16

标签: unicode ascii filenames transliteration truncation

我的问题很笼统 - 我想问一下编程语言中是否有任何特殊模块,或者是一个可以让我完成任务的现成程序。

是否有任何方便的方法(除了用多个替换语句编写自己的函数)自动将所有国家字符替换为共同字母?例如,我想将æ替换为 ae ,将ä替换为 a < e 等等。

如果无法准备通用功能,那么目前使用的编程语言中是否有任何就绪功能,只需将允许的字符限制为标准拉丁字母的字符就可以删除这些字符?

5 个答案:

答案 0 :(得分:2)

unidecode,可用于多种语言(perl,python,java)。我之前写的是in this answer

>>> from unidecode import unidecode
>>> unidecode(u"İstanbul")
'Istanbul'
>>> unidecode(u"\u5317\u4EB0")
'Bei Jing '

答案 1 :(得分:1)

音译就是你要找的词:)

在php中,这是通过iconv实现的: http://php.net/manual/en/function.iconv.php

正如其他人所说,如果可能的话,最好将所有内容保存在Unicode(utf8或16)中。

答案 2 :(得分:0)

我现在不使用你正在使用的语言,但是你可以在php中使用

$text = preg_replace("/[^a-zA-Z0-9]+/", "", $text);

您可以更改reg exp以允许更多/更少的字符。

答案 3 :(得分:0)

在PHP中,您可以扫描目录中的文件:

<?php
$dir = '';
    if ($handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
        if ($file[0] == '.' || is_dir($dir.'/'.$file)) {
            continue;
        }
//functions here
    }
    closedir($handle);
}
?>

然后用这个正则表达式重命名它们:

$newname = ereg_replace("[^A-Za-z0-9]", "", $oldname);

您可以将$ oldname设置为目录中每个文件的文件名,并将其放在//functions所在的位置,该文​​件将遍历目录中的每个文件并根据正则表达式重命名。

答案 4 :(得分:0)

如果您的输入是Unicode,则可以应用Unicode normalization NKFD来近似您想要的内容。 Python有这个built-in。标准化后,您可以去除重音符号,这些重音符号将与它们所属的字母分开。

>>> import unicodedata
>>> s = u"äçéì"  # u"" makes a Unicode string in Python 2.x
>>> unicodedata.normalize("NFKD", s).encode("ascii", errors="ignore")
'acei'

但这不适用于æ。