2012-02-26 5 views
1

제 질문은 일반적입니다. 프로그래밍 언어로 특별한 모듈이 있는지 또는 제 작업을 수행 할 준비가 된 프로그램이 있는지 묻고 싶습니다.문자열에서 비 ASCII를 모두 제거하십시오.

자동으로 모든 국가 문자를 응답자 문자로 대체하는 편리한 방법이 있습니까? 예를 들어, 나는 전자 전자 에 등등, æ ä AE, -로 대체하고자합니다.

보편적 인 기능을 준비 할 수 없다면 현재 사용되는 프로그래밍 언어에 준비된 기능이 있습니까? 허용 된 문자를 표준 라틴 알파벳의 문자로만 제한함으로써 이러한 문자를 제거 할 수 있습니까? 다른 사람들이 말했듯이 http://php.net/manual/en/function.iconv.php

, 그것은 유니 코드로 모든 것을 유지하는 것이 가장이다 (UTF8 또는 :

+1

자세한 정보가 필요합니다. 어떤 플랫폼과 파일 시스템입니까? 그리고 왜 이것을 처음부터하고 싶습니까? 이러한 특수 문자로 어떤 문제가 발생합니까? –

+2

일반적인 질문 : 왜 그렇게하고 싶습니까? '대응하는'ASCII 글자는 일부 로케일의 어리석은 개념 일 수 있으므로 느슨한 정보입니다. 특히 파일 이름에는 기본적으로 두 가지 의미가 있습니다. Windows 용 UTF-16, Unices 용 UTF-8입니다. 다른 모든 것은 한 가지 방법 또는 다른 방법으로 사용하기에 완전히 엉망입니다. – schlenk

+0

** 표준 라틴 알파벳은 약 600 자입니다 ** ** ** ** ** ** 당신은 알고 있습니다[email protected]의 질문을 반향시켜야합니다. 왜 세상에서이 악한 일을하고 싶습니까? 문화적 협착은 숨 막히게 원시적입니다. – tchrist

답변

1

음역 당신이 PHP에서 :)

찾고있는 단어, 즉의 iconv 통해 이루어진다 16).

0

는 지금 사용하고 있지만, PHP는 당신이

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

당신이 등록 특급을 변경할 수 있습니다 할 수있는 언어는 더/덜 문자를 허용하지 않습니다.

+0

그 때문에 움라우트 등이 포함 된 문자열은 꽤 추악합니다. – ThiefMaster

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

if $ oldname = 'была' – Greg

+0

빈 파일 이름을 가지며, if-then 문을 설정하거나 다음과 같이하면됩니다 :'pat = array ('e'=> '[eeèêë]', 'n '=' '[nñ]', 'o'=> '[oòóôõö]', 'a'=> '[aàáâããäå]', 'i'=> '[iìíîï]', 'u'=> '[uùúûü preg_replace ("/".$ pat [ 'e']."/ i ","# ', $ string);'나는 어떻게 기억 하는지를 기억한다. 키릴 문자로이 작업을 수행하고 사이트의 위치를 ​​찾으려고합니다. 편집 - 여기 : http://pastebin.com/raw.php?i=X1NAsnrJ – ionFish

0

입력이 유니 코드 인 경우 Unicode normalization NKFD를 적용하여 원하는 것을 대략적으로 적용 할 수 있습니다. 파이썬에는 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

여러 언어 (perl, python, java)에서 사용할 수있는 unidecode이 있습니다. 나는 그것에 대해 전에 쓴 in this answer.

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