한글이름으로된 파일이 검색 안되는 현상 - 1

오이영·2022년 11월 9일
0

issue

목록 보기
1/2

아니 Flutter 개발을 하면서 특이한 경험을 했다.
아니 사실 Flutter의 문제는 아니다.

일단 내가 뭘 개발하고 있는 중이었고 무슨 issue가 있었는지를 적어보겠다.
내가 개발 중이던 기능은 아주 단순했다.

디바이스에 저장된 파일들을 보여주는 흔히 아는 파일 탐색기이다.
로컬에 있는 파일을 다 불러오고 리스트에 보여주고 그것을 검색해 볼 수 있는 그런 파일 탐색기.

근데 정상적으로 완성했다고 생각했는데 검색 기능에서 오류가 있었다.
검색어가 영어일 경우는 정상 작동하는데 한글이 포함되어 있는 경우는 분명 검색되어야 할 항목이 검색되지 않았다.

사실 구현한 함수에서 잘못되기도 힘든게

searchResults = pathDocuments.where((el) => el.name.contains(searchValue)).toList();

이 한줄이 다였기 때문이다. 현재 경로의 문서들(pathDocuments) 중 이름에 검색어(searchValue)가 포함된 것을 반환하는 기능이 다였기 때문이다.
그래서 문서 이름이 잘못 저장되어 있는지 로그로 찍었는데 보기에는 정상적으로 보였다.

아 뭐가 잘못된거지...라고 생각하며 디버깅을 계속 돌렸는데...


사진에서 첫번째 줄은 pathDocuments 중 하나의 경로이다.
두번째 줄은 첫번째 줄 디버깅 결과 값 중 '한글' 부분만 복사해서 string을 만들고 거기에 '한'이 포함되어 있는지 확인한 값이다.
세번째 줄은 내가 키보드로 '한글'이라고 입력해서 그 중 '한'이 포함되어있는지 확인한 값이다.

두번째 줄의 결과는 false이고 세번째 줄의 결과는 true였다.
아니 이게 뭔소리야... 싶었는데
생각해보니 뭔가 한글 형식 자체의 문제임을 인지했다.
그래서 codeUnits으로 찍어봤다.

둘의 coudeUnits 값이 다른게 보였다.

아... 인코딩 문제구나...

쫌더 보면
파일 이름에서 복사된 '한글'의 codeUnits을 보면 자음 모음이 다 분리되어 코드가 나타나고
내가 직접 입력한 '한글'의 codeUnits은 음절 단위로 나타난다.

iOS나 맥에서 한글로 된 이름의 파일인 경우에 이름이 초성, 중성, 종성을 다 다른 코드로 처리해서 발생한 이슈인 것으로 보인다.

아 일단 이유는 알았으니 해결 방법은 다음 번에 더 적겠다.

0개의 댓글