UTF-8 NFD

emacs를 사용하다가, 한글 표현이 다른 것은 잘 되는데, shell에서만은 유독 한글이 풀어서 나와서 불편했었습니다. 그런데, eshell 에서는 한글 조합이 잘 되는 것입니다. 두 Buffer를 검사했었더니, 모두 utf-8-unix를 쓰고 있었습니다. 다음은 조합이 어떻게 안되는지 보여줍니다.

decomposedKorean-Emacs
한글 조합이 제대로 되어 지지 않은 emacs shell 의 모습
composedKorean-Emacs
한글 조합이 제대로 되어 있는 emacs eshell 의 모습

여러가지로 조사를 해 본 결과, file-name-coding-system 이 utf-8-nfd 일 경우에, eshell은 한글 표현이 제대로 되었습니다. file-name-coding-system이 utf-8-unix로 바뀔 경우, eshell도 한글 조합이 M-x shell 과 같이 풀어서 나오는 것이었습니다.

더 조사를 해보니, 이것은 현재 Carbon Emacs ( GNU Emacs 24.5.1 (x86_64-apple-darwin13.4.0, NS apple-appkit-1265.21) of 2015-04-10 on builder10-9.porkrind.org ) 가 UTF-8의 NFC까지 지원하고, NFD를 지원하지 않는 다는 사실을 알았습니다. ( http://www.emacswiki.org/emacs/CarbonEmacsPackage#toc23 )

Emcas Wiki에 따르면, NFC ( Normalization Form C )는 diacritical marks ( 예: ü )등이 두개로 나누어서 표시된다는 것입니다. 즉, ü 이 u” 와 같이 된다는 것이지요. NFD ( Normalization Form D )에 와서야, decomposed 되어 있는 character가 한개의 composed character로 표현이 됩니다. 즉 ü 가 제대로 잘 보이는 것이지요. 이 문제로 다음과 같은 language는 문제가 될 수 있습니다.

  • All characters containing diacritical marks (accents, umlauts, tilde, etc.)
  • Japanese Kana characters with Dakuten/Handakuten signs
  • Korean Hangul characters

한글도 조합으로 이루어져야 하는데, 조합된 한글이 표현이 안되는 것이라는 것으로 저는 이해를 했습니다.

위의 사이트는 위키에서 참고한 문헌입니다.

문제는 다음과 같이 하여 해결을 했습니다.

(prefer-coding-system 'utf-8-nfd)

다른 방법으로 다음과 같이 해결 할 수도 있습니다.

(setq process-coding-system-alist (cons '("bash" . (utf-8-nfd . utf-8-nfd)) process-coding-system-alist))

또는

(setq file-name-coding-system 'utf-8-nfd)

 

You May Also Like

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다