2012-02-26 70 views
1

我的问题是一般 - 我想问问有没有在编程语言或准备程序,这将让我完成我的任务的任何特殊模块。删除字符串中的所有非ASCII

有任何方便的方式来自动替换所有国家的字符corespondents字母(不是写自己的职能与多个REPLACE语句等)?例如,我想替换æAEä一个ęË等。

如果这是不可能的准备普遍的功能,有没有在当前使用的编程语言任何现成的功能,这将限制焦炭允许只向那些从标准拉丁字母简单地删除这样的人物? http://php.net/manual/en/function.iconv.php

正如其他人所说,这可能是最好把一切都以Unicode(UTF-8或:

+1

这需要更详细的信息。你在哪个平台和文件系统上?你为什么要首先做这个 - 你遇到这些特殊字符时遇到了什么问题? – 2012-02-26 17:53:03

+2

常见问题:你为什么想这样做?由于“相应的”ASCII字母可能对某些语言环境而言是一个愚蠢的概念,因此信息丢失。特别是对于文件名,基本上只有两件事情是有意义的:Windows的UTF-16,Unices的UTF-8。其他一切都是以一种或另一种方式使用的。 – schlenk 2012-02-26 17:56:09

+0

**标准拉丁字母有大约600个字符,**你知道。我必须回应@schlenk的查询 - 为什么你会想要做这个邪恶的邪恶的事情?文化的狭隘是令人惊叹的原始。 – tchrist 2012-02-26 18:53:48

回答

1

音译是你要找的:)

在PHP中的话,那是通过实现的iconv如果可能的话)。

0

我现在不使用的是什么语言,但在PHP中,你可以做

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

你可以改变REG EXP让更多/更少的字符。

+0

这使得包含元音变音等的字符串非常难看。 – ThiefMaster 2012-02-26 17:59:41

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所在的位置,它将遍历目录中的每个文件并根据正则表达式对其进行重命名。

+0

如果$ oldname ='была' – Greg 2012-02-26 18:06:17

+0

那么你会得到一个空白的文件名,你可以设置if-then语句,或者这样做:'pat = array('e'=>'[eéèêë]','n '=>'[nñ]','o'=>'[oòóôõö]','a'=>'[aàáâãä]','i'=>'[iìíîï]','u'=>'[uùúûü ]','y'=>'[yýÿ]');'和'preg_replace(“/".$ pat ['e']。”/ i“,'#',$ string);'我记得看到用西里尔字符做这个,并且试图找到它的位置。编辑 - 在这里:http://pastebin.com/raw.php?i=X1NAsnrJ – ionFish 2012-02-26 18:08:30

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' 

虽然这不适用于æ。

2

unidecode,这是适用于几种语言(Perl,Python和Java的)。我以前写过关于它in this answer

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