Unicode 从字符串中删除所有非ASCII

Unicode 从字符串中删除所有非ASCII,unicode,ascii,filenames,transliteration,truncation,Unicode,Ascii,Filenames,Transliteration,Truncation,我的问题是一般性的——我想问一下,在编程语言中是否有任何特殊的模块或现成的程序可以让我完成我的任务 是否有任何方便的方法(除了使用多个替换语句编写自己的函数)自动将所有国家字符替换为共同响应者的字母?例如,我想替换æto ae、äto a、ęto e等等 如果无法准备通用函数,那么在当前使用的编程语言中是否有现成的函数,只需将允许的字符限制为标准拉丁字母表中的字符即可删除这些字符?您正在寻找的是音译:) 在php中,这是通过iconv实现的: 正如其他人所说,如果可能的话,最好将所有内容都保存

我的问题是一般性的——我想问一下,在编程语言中是否有任何特殊的模块或现成的程序可以让我完成我的任务

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


如果无法准备通用函数,那么在当前使用的编程语言中是否有现成的函数,只需将允许的字符限制为标准拉丁字母表中的字符即可删除这些字符?

您正在寻找的是音译:)

在php中,这是通过iconv实现的:


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

我现在不知道您使用的是什么语言,但在php中您可以这样做

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

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

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

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

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

如果您的输入是Unicode,则可以应用NKFD来近似您想要的内容。Python有这样的功能。在标准化之后,您可以去除重音,这些重音将与它们所属的字母分离

>>> import unicodedata
>>> s = u"äçéì"  # u"" makes a Unicode string in Python 2.x
>>> unicodedata.normalize("NFKD", s).encode("ascii", errors="ignore")
'acei'
但是,这对æ不起作用。

有,它可用于多种语言(perl、python、java)。我以前写过


这需要更详细的信息。您使用的是什么平台和文件系统?首先,你为什么要这样做?这些特殊角色会遇到什么问题?通常的问题是:你为什么要这样做?您可能会丢失信息,因为对于某些地区来说,“对应的”ASCII字母可能是一个愚蠢的概念。特别是对于文件名,基本上只有两件事情是有意义的:UTF-16用于Windows,UTF-8用于Unice。不管怎么说,其他的东西都是乱七八糟的。你知道,标准拉丁字母表大约有600个字符。我不得不回应@schlenk的质疑——你到底为什么要做这种邪恶的事?文化的狭隘是惊人的原始。是的,你是对的。我只想使用我能在键盘上看到的字母。这个问题的答案很简单——我使用的系统在对文件名中包含一些特殊字符的文件进行操作时会崩溃。这使得包含umlauts等的字符串非常难看。然后您将有一个空白的文件名,您可以设置一个if-Then语句,或者执行以下操作:
pat=array('e'=>'[eèèë],'n'=>'[nñ],'o'=>'[oòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòò242
>>> import unicodedata
>>> s = u"äçéì"  # u"" makes a Unicode string in Python 2.x
>>> unicodedata.normalize("NFKD", s).encode("ascii", errors="ignore")
'acei'
>>> from unidecode import unidecode
>>> unidecode(u"İstanbul")
'Istanbul'
>>> unidecode(u"\u5317\u4EB0")
'Bei Jing '