현재 그놈 터미널 문자 인코딩을 감지하는 방법은 무엇입니까?

현재 그놈 터미널 문자 인코딩을 감지하는 방법은 무엇입니까?

gnome-terminal명령줄에서 현재 문자 인코딩을 검색하려고 합니다 . 나는 다음을 사용해 보았습니다 gconftool.

$ gconftool-2 --get /apps/gnome-terminal/profiles/Default/encoding
current
$ gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/encoding
en_US.UTF-8
$ gconftool-2 --get /apps/gnome-terminal/profiles/Default/encoding
en_US.UTF-8

하지만 이제 메뉴로 가서 gnome-terminal선택 Terminal->Set Character Encoding->ISO-8859-10하고 다시 실행 하면

$ gconftool-2 --get /apps/gnome-terminal/profiles/Default/encoding
en_US.UTF-8

따라서 터미널이 해당 인코딩을 사용하고 있어도 인코딩이 /apps/gnome-terminal/profiles/Default/encoding로 변경되지 않았습니다 . ISO-8859-10따라서 gconftool현재 인코딩을 결정하는 데 사용할 수 없는 것 같습니다.

답변1

locale charmap$LANG, $LC_CTYPE, $LC_ALL에 의해 설정된 값을 보고하는 의 출력을 확인하는 것이 좋습니다 . 이는 터미널에 직접 쿼리하지 않지만 대부분의 응용 프로그램에서는 로케일이 터미널과 일관되게 올바르게 설정되는 것이 중요합니다. 실제 동작이 아닌 다른 내용이 보고되면 귀하의 앱뿐만 아니라 거의 모든 다른 앱이 터미널에서 오작동하게 되며 이는 귀하의 잘못이 아닙니다. 물론 사용자는 메뉴에서 인코딩을 변경할 수 있지만, 발에 총을 쏘기로 결정한 경우에는 할 수 있거나 해야 할 일이 많지 않습니다. 잘못된 시스템 전체 설정을 감지하는 것은 귀하의 임무가 아닙니다. 또한 앱이 실행되는 동안 사용자가 인코딩을 전환하는지 알 수 있는 방법이 없으므로 시작 시 이를 확인할 필요가 없다고 생각합니다.

실제로 런타임 동작을 확인해야 하는 경우 커서 위치를 쿼리하는 이스케이프 시퀀스를 내보내고(그리고 마치 키보드에서 입력한 것처럼 특정 형식으로 다시 보고함) 단일 문자를 형성하는 일부 바이트를 내보낼 수 있습니다. UTF-8로 다른 인코딩의 여러 문자를 사용하고(그동안 로컬 에코를 비활성화하여 사용자가 키를 눌러도 커서가 이동하지 않음) 커서 위치를 다시 쿼리합니다. 아마도 너무 많은 문제가 있고 노력할 가치가 없을 수도 있습니다.

답변2

/apps/gnome-terminal/profiles/Default/encoding다음은 문자열과 같을 때 인코딩을 결정하는 문제를 해결하는 절반의 솔루션입니다 current. 문자열이 현재 로케일을 사용해야 함 current을 의미한다고 가정합니다.gnome-terminal

LANG인코딩을 결정하기 위해 변수를 확인하고 싶은 유혹이 있지만이것질문은 신뢰할 수 없습니다. 대신 Perl 모듈을 I18N::Langinfo사용해야 합니다:

temp=$(gconftool-2 --get /apps/gnome-terminal/profiles/Default/encoding)

if [[ $temp == "current" ]] ; then
    perl -MI18N::Langinfo=langinfo,CODESET -E 'say langinfo(CODESET())'
else
    echo $temp
fi

gnome-terminal이 답변은 사용자가 메뉴에서 인코딩을 수동으로 변경할 때 인코딩을 결정하는 문제를 해결하지 않습니다 gnome-terminal.

관련 정보