(소금 한 덩어리로 이것을 가져 가라) 내가 기억하는 한, 문제는 libiconv
작동 방식에 있습니다. 멀티 바이트 인코딩은이를 해독하기 위해 상태 머신이 필요하고 libiconv
전체 문자를 수신하는 것을 선호하므로 한 함수 호출에서 절반을 문자로, 다음 문자에서 다른 문자를 반으로 줄 수는 없습니다.
다른 두 가지 솔루션을 생각할 수 있습니다. 하나는 대역 외 방법이며 다른 하나는 대역 내 해킹입니다.
터미널 에뮬레이터 인코딩 변경 (대역 외) : 하나는 터미널 에뮬레이터의 문자 인코딩을 변경하는 것이므로 기본 인코딩은 Shift JIS입니다. 방금 확인 konsole
했으며 이것을 지원합니다. 메뉴에서보기 → 문자 인코딩 → Japenese → sjis. 그런 다음 tail -f
파일 만 있으면 konsole
멀티 바이트 문자를 디코딩하고 글꼴 글리프와 일치시킬 수 있습니다.
트랜스 밴드 터미널 인코딩 (대역 내, 최고) : Gilles가 제공 한 덕분에 luit
아주 오랜 시간 을 떠올리게 되었습니다. luit
XOrg 배포판과 함께 제공되는을 사용하십시오 (Debian에서는 패키지 x11-utils
임). 다음과 같이 사용하십시오.
$ luit -encoding SJIS -- tail -f x
그러면 터미널 인코딩과 터미널 인코딩간에 SJIS가 트랜스 코딩되고 실행 tail -f x
됩니다. 단점은에서 luit
지원하는 풍부한 인코딩을 지원하지 않는다는 것 libiconv
입니다. 단점은 거의 모든 곳에서 사용할 수 있다는 것입니다.
트랜스 코딩 터미널 인코딩 (인 밴드, 해킹) : 터미널 I / O를 트랜스 코딩 하는 데 사용 하는 ttyconv
몇 년 전 (초기 C에서 나중에 파이썬에서 다시 작성) 작성한 해킹libiconv
입니다. 새로운 의사 터미널을 생성하고 (a) 로컬 인코딩에서 입력 한 문자를 원격 인코딩으로 코드 변환하고, (b) 원격 인코딩에서 수신 한 문자를 로컬 인코딩으로 코드 변환합니다. 표준 Linux 터미널에서 지원하지 않는 인코딩을 사용하는 서버와 통신하는 데 사용했습니다. 내가 테스트 한 모든 원격 인코딩은 단일 바이트 인코딩이므로 Shift JIS에서 작동한다고 보장 할 수 없습니다. 요즘 대부분의 시스템이 유니 코드로 전환되면서 요즘 사용하는 전화를 찾지 못하는 경우가 많습니다.
이것이 당신이 그것을 사용하는 방법입니다 :
$ ttyconv -rsjis -- tail -f x
단점은 ttyconv
내가 쓴 것이지만 아무도 사용하지 않고 버그로 가득 차있을 것입니다. 나는 이것에 뛰어납니다. 단점은을 사용한다는 것입니다 libiconv
. 따라서 인코딩이 특이한 경우 가장 좋습니다. 마지막으로 ttyconv --list
100 개의 인코딩을 지원합니다.