UTF-16으로 인코딩된 텍스트 파일의 내용을 검색할 수 없는 이유는 무엇입니까?

UTF-16으로 인코딩된 텍스트 파일의 내용을 검색할 수 없는 이유는 무엇입니까?

내가 아는 한, 예를 들어 catfish와 gnome-search-utils는 UTF-8로 인코딩된 파일 내용을 검색할 수 있습니다. 텍스트 파일에서 단어나 숫자를 검색하려면 먼저 iconv를 통해 UTF-8로 변환해야 합니다.

파일이 알려진 경우 gedit 또는 마우스패드와 같은 텍스트 편집기는 UTF-16을 쉽게 처리할 수 있습니다.

Linux 배포판에는 UTF-16으로 인코딩된 txt 파일을 처리할 수 있는 검색 도구(GUI 또는 명령줄)가 없는 이유는 무엇입니까?

나는 Xubuntu에 있습니다.

답변1

UTF-16(또는 UCS-2)은 C 표준 라이브러리 및 POSIX ABI에서 사용하는 null로 끝나는 문자열에 매우 적합하지 않습니다. 예를 들어 명령줄 인수는 NUL로 종료되고(값이 0인 바이트) 값이 256보다 작은 모든 UTF-16 문자에는 0바이트가 포함되므로 일반 영어 문자로 구성된 문자열은 UTF-16으로 표시될 수 없습니다. 명령줄 매개변수에 16이 있습니다.

이는 결국 유틸리티가 다른 형식(예: UTF-8)으로 입력하고 UTF-16으로 변환해야 하거나 다른 방식으로 견해를 얻어야 함을 의미합니다. 첫 번째 옵션을 사용하려면 이러한 모든 유틸리티에 변환용 코드를 포함(또는 링크)해야 하는 반면, 두 번째 옵션을 사용하면 이러한 프로그램을 다른 유틸리티와 인터페이스하는 것이 다소 어려워집니다.

이러한 어려움과 UTF-8이 더 나은 이전 버전과의 호환성을 갖는다는 사실을 고려할 때 UTF-16을 사용하고 이를 위한 도구를 만들려는 인센티브를 갖고 싶어하는 사람은 거의 없을 것이라고 생각합니다.

답변2

설치하다ripgrep유용UTF-16을 지원합니다.

예를 들어:

rg pattern filename

ripgrep은 UTF-16, latin-1, GBK, EUC-JP, Shift_JIS 등과 같이 UTF-8 이외의 텍스트 인코딩으로 파일 검색을 지원합니다. (UTF-16 자동 감지에 대한 일부 지원이 제공됩니다. 다른 텍스트 인코딩을 사용해야 합니다 -E/특별히 지정 해야 합니다 --encoding flag.)

관련 정보