두 가지 특정 문제가 있습니다. sv_SE.iso8859-15에서 sv_SE.utf-8로 변환할 때 이전 파일에서 iconv -f iso-8859-15를 실행했지만 여전히 왜곡된 문자가 나타납니다. 나는 이것이 Vim 때문이라고 생각합니다. Vim에서는 더 이상 스웨덴어 åäö 문자를 입력할 수도 없기 때문입니다.
두 번째 문제는 Bash에서 새 쉘을 열거나 새 줄을 시작할 때 문자를 생성하는 두 번째 키를 누를 때까지 내가 입력한 첫 번째 스웨덴어 åäö가 표시되지 않는다는 것입니다.
따라서 키보드에서 å/를 입력하면 터미널에는 å만 표시됩니다. åäö를 입력하면 åö가 표시됩니다. 그 중 하나 뒤에 입력한 두 번째 문자는 항상 무시되고 세 번째 문자가 표시되기 시작합니다. 멀티바이트 문자에서 두 번째 바이트를 무시하거나 두 번째 바이트를 건너뛰는 것과 비슷합니다.
편집: 명확히 하기 위해 첫 번째 멀티바이트 문자를 입력한 후에 다른 항목이 바로 표시됩니다. 하지만 åååå를 네 번 입력하면 첫 번째 입력이 지연되고 Enter 키를 누른 다음 종료하면 결과는 åexit입니다. 버퍼에 마지막으로 입력한 문자의 마지막 바이트를 저장하는 것 같습니다.
다음은 관련 환경 구성입니다. 그래도 이 문제를 해결해야 한다면 알려주시기 바랍니다.
$ cat .inputrc
set show-all-if-ambiguous on
set mark-directories on
set mark-symlinked-directories on
set page-completions off
set visible-stats on
set completion-query-items 9001
set input-meta on
set output-meta on
set convert-meta off
"\e[A": history-search-backward
"\e[B": history-search-forward
"\C-w": backward-kill-word
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[3~": delete-char
$ locale
LANG="sv_SE.UTF-8"
LC_COLLATE="sv_SE.UTF-8"
LC_CTYPE="sv_SE.UTF-8"
LC_MESSAGES="sv_SE.UTF-8"
LC_MONETARY="sv_SE.UTF-8"
LC_NUMERIC="sv_SE.UTF-8"
LC_TIME="sv_SE.UTF-8"
LC_ALL="sv_SE.UTF-8"
$ locale -a
sv_SE
sv_SE.ISO8859-1
sv_SE.ISO8859-15
sv_SE.UTF-8
또한 스웨덴 맥 포럼에서 제안한 대로 .inputrc에서 이것을 시도했습니다. 위의 문제에는 도움이 되지 않습니다. Terminal.app과 iTerm2.app에서 증상은 동일하지만 Terminal.app에서 "Escape non-ASCII 문자" 확인란이 선택 취소되어 있습니다.
set meta-flag on
set input-meta off
set output-meta on
set convert-meta off
윔에서.
- 현재 언어: "sv_SE.UTF-8/sv_SE.UTF-8/sv_SE.UTF-8/C/sv_SE.UTF-8/sv_SE.UTF-8"
- 인코딩 설정=UTF-8
- 파일 인코딩 설정=UTF-8
저는 Mac OS Lion의 최신 업데이트와 iTerm2의 최신 베타 버전을 실행하고 있습니다. Terminal.app에도 같은 문제가 존재하는데, 제 환경 때문이 아닐까 싶습니다.
답변1
터미널 문제에 관한 한, 성숙한 유니코드를 지원하는 것으로 알려진 터미널 에뮬레이터를 사용하려고 합니다. 예를 들어 uxterm
시작 시 셸 실행 파일에서 로케일 관련 환경 변수를 사용할 수 있는 경우(즉, ~/.profile
유사한 셸 설정 에서 사용할 수 없는 경우) 시작 스크립트에서 도움이 될 것입니다.
이것이 도움이 될지는 모르겠지만 다음을 추가하여 Vim과 관련된 유니코드 문제를 해결했습니다 ~/.vimrc
.
" Unicode options
if has("multi_byte")
" set the display encoding
" (default is "", or "utf-8" in the GUI)
if &termencoding == ""
" we're probably not using the GUI
" note: :set won't allow &-replacement
let &termencoding = &encoding
endif
" set the internal encoding
set encoding=utf-8
" &fileencoding (controls how characters in the internal encoding will
" be written to the file) will be set according to &fileencodings
" (default: "ucs-bom", "ucs-bom,utf-8,default,latin1" when 'encoding'
" is set to a Unicode value)
endif " has("multi_byte")
답변2
UTF-8 기반이 아닌 로케일에서 UTF-8 기반 로케일로 로케일을 변경하려면 환경 설정 이상의 작업이 필요합니다. 사용된 애플리케이션이 다음과 같아야 합니다.세워짐그리고와이드 문자지원하다. 설명하신 증상은 그러한 지원이 부족함을 나타냅니다. 이는 다음과 같은 라이브러리의 문제일 수 있습니다.slang
또는ncurses
예를 들어.
OSX용 "UTF-8 마이그레이션 가이드"와 같은 것을 찾아보세요. 방법을 안내해 줄 것입니다.일부 패키지를 와이드 문자를 지원하는 버전으로 교체. 터미널 응용 프로그램과 같이 현재 사용하고 있는 일부 응용 프로그램에는 이 기능을 지원하는 옵션이 없는 경우가 있을 수 있습니다. 그러나 UTF가 점점 더 널리 사용되기 때문에 그럴 가능성은 없습니다.