본문 바로가기

Programming/iOS

iOS에서 파일을 통해 문자열 가져왔을 때 인식 문제

반응형

출처

http://blog.naver.com/PostView.nhn?blogId=mg2000kim&logNo=80148808352&viewDate=&currentPage=1&listtype=0&from=postList



iOS에서 파일을 검색할때 보통 아래와 같은 형식으로 합니다.




NSFileManager *manager = [NSFileManager defaultManager];

NSArray *fileList = [manager contentsOfDirectoryAtPath:path error:NULL];

예를 들어 0번째 파일명이 "한글.txt"라고 가정했을때...

그 파일이 "한글.txt"가 맞는지 확인하다면, 일단적으로 다음과 같이 할 것입니다.

 

if ([[fileList objectAtIndex:0] isEqualToString:@"한글.txt"] == YES)

이렇게 하면 같을 것이라고 예상하지만, 값이 다르다고 나옵니다.

답답한것은 NSLog로 찍어보면 둘다 동일하다는 것이죠.

원인은 iOS에서 파일/디렉토리명은 Canonical Mapping이 적용된다는 것입니다.

Canonical Mapping이 적용되면,

한글.txt -> ㅎㅏㄴㄱㅡㄹ.txt

로 자소가 각각 분리되어 저장이 됩니다.

그런데 NSLog는 똑똑하게(?) Canonical Mapping이 적용된 문자열도 제대로 보여줍니다.

Hex로 찍어봐야 비로서 다르다는 것을 눈치채긴 하는데, 왜 다른지 알아내기는 어렵습니다.

엉뚱하게 인코딩이 다른가 헛다리 짚기 일쑤죠.

Canonical Mapping 적용/해제 하는 함수가 있네요.

 

[nsstring decomposedStringWithCanonicalMapping] -> 매핑 적용

[nsstring precomposedStringWithCanonicalMapping] -> 매핑 해제

이것으로 삽질하는 사람이 없기를..





반응형