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)

 

Easytag: MP3 ID3 Tag의 EUC-KR을 UTF-8 으로 변환하는 방법

기존의 가지고 있는 MP3 파일들이 Encoding이 EUC-KR로 되어 있어서 iTunes등에서 ID3 Tag들이 제대로 잘 안보여 집니다. International Language를 Support 하기 위해서는 UTF-8 이 표준으로 잡고 있기에 이를 변환해 주는 tool 이 필요합니다. 물론 iTune에서 바꿀 수 있는 기능도 있지만, 여러가지 불편한 점이 있기때문에 한번에 변환시킬 방법이 필요합니다.

이에 몇가지 인터넷에 많은 방법이 있지만, 가장 쉬운 것은 EasyTag 이라는 Utility를 이용하면 해결을 볼 수 있는 것 같습니다.

* Homepage: http://easytag.sourceforge.net

Ubuntu 에서는

apt-get install easytag

로 설치가 가능한 것 같구요,

MacOSX에서는 저는 port를 이용하여,

sudo port install easytag 

으로 설치하여 X11 을 이용하여 설치했습니다. 아마 Xcode를 이용한 방법이 또 있는 것 같은데, 잘 Search안하고 그냥 port를 이용해버렸네요. 그래도 대략 원하는 것을 얻었으니 만족합니다. (Darwin Port는 http://easytag.darwinports.com/ 에서 참조했습니다.)

변환은 이렇게 했습니다. 1

easytag을 실행하고, Settings -> Preferences -> ID3 Tag Settings 를 선택합니다. 그리고 다음 Option을 선택합니다.

- Automatically convert old ID3v2 tag versios
- Try to save tags to ISO-8859-1. If it isn't possible then use UNICODE (recommended)
- Use non standard character set for reading ID3 tags: EUC-KR
- Use non standard character set for writing ID3 tags: UTF-8

그리고 MP3가 있는 Directory를 Browsing 하고 찾아낸 파일들을 Select 하여 Save 하면 됩니다.

Convert from/to utf-8 to/from euc-kr in emacs

* Note that this works with emacs 22.2 windows version.

  1. Load a document
  2. M-x mm-set-buffer-file-coding-system
  3. Select language type (For example, euc-kr or utf-8)
  4. Check the buffer encoding type
  5. Sava a document by C-x s or M-x write-file

Make sure that “(setq coding-system-for-write           ‘utf-8)” should not be set in .emacs. If that, it will write it utf-8 always.

emacs에서 utf-8과 euc-kr 전환하기

* 다음 방법은 emacs 22.2 windows 버전을 이용하였을때 사용했음을 주의하시기 바랍니다.

  1. 문서를 읽어옵니다.
  2. M-x mm-set-buffer-file-coding-system
  3. 그리고 언어 선택을 합니다. 예를 들어, euc-kr 혹은 utf-8 과 같이 선택합니다.
  4. Buffer Encoding Type이 바뀐것을 확인합니다.
  5. C-x s 혹은 M-x write-file 으로 문서를 저장합니다.

“(setq coding-system-for-write           ‘utf-8)” 와 같은 세팅이 .emacs 나 세팅을 중간에 해두었다면 동작하지 않습니다. 왜냐하면, 그것의 의미는 항상 utf-8으로 문서를 저장하는 setting 이기 때문입니다.