2012-02-26 104 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 ' 
相關問題