2014-05-13 5 views
2

터키 문자가 아닌 사람들을위한 비영어권 단어가 포함 된 데이터베이스가 있습니다. 그리고 나는 데이터베이스와 입력을 비교하는 알고리즘을 가지고있다.UITextField에서 영어 이외의 문자를 가져와 일반 문자로 간주하는 방법

제 문제는 이것입니다. 내 데이터베이스에서 모든 문자열은 터키 문자로 작성됩니다. 그래서 heyyö과 비교할 요소가 있다고 가정 해 봅시다. 사용자가 heyyo을 입력하면 다른 단어로 간주되므로 찾지 못합니다.

첫 번째 생각은 영어가 아닌 문자가 영어가 아닌 문자 (예 : g 또는 ı)를 고려했을 때 특수한 경우에 넣어졌지만 무차별 한 힘을 의미합니다.

나는 이것을 우아함으로 어떻게 할 수 있습니까?

Oh 및 사용자가 텍스트 필드에서이 입력을 묵시적으로 입력하면이를 입력합니다.

답변

3

발음 구별 기호 제거는 "폴딩"이라고합니다. 구별 부호와 상관없이 문자열을 비교할 수 있습니다 (NSDiacriticInsensitiveSearch 옵션 사용).

[string compare:otherString options:NSDiacriticInsensitiveSearch] == NSOrderedSame 

당신은 유사 stringByFoldingWithOptions:locale:를 사용하여 접힌 문자열을 생성 할 수 있습니다.

이 경우에만 발음 구별 기호가 제거됩니다. 캐릭터가 똑같지 않고도 "똑같이"보일 수있는 많은 방법이 있습니다. 터키어는 "I"의 소문자 버전이 "i"가 아닌 "ı"(라틴 소용돌이 I)이기 때문에 다소 유명합니다. 특히 터키어를 다루는 경우이를 고려해야합니다. 터키 문자가 ASCII의 일부가 아닌, 당신은 손실 전환을 허용하고 있기 때문에 '후 자동으로'O '을 변경,

NSString *input = @"heyyö"; 
NSData *intermediaryDataForm = [input dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
NSString *output = [[NSString alloc] initWithData:intermediaryDataForm encoding:NSASCIIStringEncoding]; 

그 방법 : 당신이 할 수있는 일

+0

특히 터키어를 다루고 있습니다. 입력을 NSMutablearray에 저장하고 중간 처리를 많이 한 후에 문자열 비교를 비교합니다. 배열에서 각 요소를 가져 와서 "접힌"것처럼이 "접는 개념"을 사용하는 다른 방법이 있습니까? 배열에 다시 추가하십시오. – judge

+0

네, stringByFoldingWithOptions : locale :'이 당신을 위해 할 수있는 것입니다. 또한 대문자를 소문자로 변환 할 수 있습니다 (단, 터키어에서는 점으로 구분되지 않고 점으로 구분되지 않으므로 염두에 두십시오). 터키 점선 문제는 매우 널리 퍼져있어서 ' stringByFoldingWithOptions : locale :'docs. –

+0

(BTW, 나는이 모든 것을 당신이 터키인에게 익숙하지 않은 것처럼 말하고 있으며, 그것을 암시하는 것을 무례하게 의미하지는 않지만 나중에 읽을 수도 있고 알파벳을 이해하지 못할 수도있는 사람들을 위해 글을 쓰고 있습니다.) 현재 실행중인 문제의 종류를 해결 함에도 불구하고 그것을 이해할뿐입니다.) –

0

이 같은 것입니다 o '를 NSData 형식으로 변환 할 때. 그런 다음 다시 NSString으로 변환하면 문제가 해결됩니다.

관련 문제