彼女からは、おいちゃんと呼ばれています

ウェブ技術や日々考えたことなどを綴っていきます

Carbon Emacs の ansi-term で日本語が文字化けしないようにする

前回の記事でも少し触れましたが、Emacsansi-term で日本語の文字化けに悩まされておりまして。やっと解決できたのでメモしておきます。同じ問題を抱える人の参考になればいいな、と。


(▲ 例えば「ユーザ登録」が正しく表示されない)

なお、環境は次のとおりです。

初期化ファイル(~/.emacs 等)に加える設定

初期化ファイル(~/.emacs 等)へ下記を記述すると文字化けを解消できました。

(setq locale-coding-system 'utf-8)

ちなみに、これも前回の記事で触れましたが、既に環境変数 LANG は「ja_JP.UTF-8」に設定していました。

(setenv "LANG" "ja_JP.UTF-8")

また、Carbon Emacs ではデフォルトで日本語が使えるように設定されていて、

(set-language-environment "Japanese")

等は japanese-init.el という初期化ファイル内に記述されていました(詳細はページ下部のおまけ 3 参照)。

設定を一時的に変更したいとき

とりあえず一時的に設定変更したい場合は ansi-term 起動中に

(C-c を打った後に)M-x set-locale-environment

と打つと

Set environment for locale:

と返ってくるので「utf-8」と打てば日本語の文字化けは解消されます。

以上です。ではでは。

おまけ 1 - それでも一部文字化けが...

それでも一部文字化けを見つけてしまいました。このエントリーと同じくらいの文字数に対して 2箇所だったので気にはなりませんでしたが、完璧を求められる環境では注意したほうが良いかもしれません。

ちなみに、同箇所を Emacs23.3(Cocoa Emacs)で確認してみると、文字化けしていませんでした。Emacs のバージョンの問題??

おまけ 2 - set-buffer-process-coding-system

emacs内のterminalで日本語表示#6815763 【OKWave】で見つけた

(C-c を打った後に)M-x set-buffer-process-coding-system

として、

Coding-system for output from the process:
Coding-system for input to the process:

にそれぞれ「utf-8」と返す方法では、下記のとおり中途半端な日本語表示になってしまって解決しませんでした。


おまけ 3 - Carbon Emacs 標準の日本語設定

日本語の設定はどうすればいいですか?

特に設定する必要はありません。 Mac OS X の日本語環境では、あらかじめ Emacs の日本語設定が有効になっています。

この日本語設定は、Site-Start ディレクトリ((Emacs.app)/Contents/Resources/site-lisp/site-start.d/)の japanese-init.el ファイルで設定されています。不要であれば、このファイルを削除して下さい。なお、メニューバーから "Help > Carbon Emacs Package > Open Site-Start Directory" を選ぶと、Finder で Site-Start ディレクトリを開くことができます。

上記 japanese-init.el の内容は次のとおりです。参考まで。

;; japanese settings for Carbon Emacs Package -*- coding: iso-2022-7bit -*-

;; Settings will be ignored in a non-Japanese environment
;; 日本語環境でのみ以下の設定をロードします

;; Chinese and Korean settings can be made from lines in sections A and B.

(when
    
    ;; Mac OS X Japanese Language environment
    (string-match ":1:14\\'" (getenv "__CF_USER_TEXT_ENCODING"))
;;     (equal (substring
;;             (shell-command-to-string "defaults read -g AppleLocale") 0 2)
;;            "ja")

  ;; ============= Japanese language setting ======================

  ;; A. inline input method (window-system)
  (when (eq window-system 'mac)
    (add-hook 'minibuffer-setup-hook 'mac-change-language-to-us)
    (mac-translate-from-yen-to-backslash) ;; yen => backslash
    (set-language-info "Japanese" 'input-method "MacOSX") ;; bad fix
    ;; input method in read-only buffer (e.g. C-s in dired-mode)
    (setq mac-pass-key-to-system-on-read-only-buffer t)
    )
  ;; A. end

  ;; B. language environment
  (set-language-environment "Japanese")
  (set-default-coding-systems 'utf-8-unix)
  (set-keyboard-coding-system 'utf-8)
  (set-clipboard-coding-system 'utf-8)
  (set-terminal-coding-system 'utf-8)
  ;; (set-file-name-coding-system 'utf-8m) ; already set
  (prefer-coding-system 'utf-8-unix)
  ;; B. end

  ;; C. fix: Unicode => Japanese mapping
  ;; Thanks to saiki-san (see [macemacsjp-users 870])
  ;; register circle around digits to cjk table (by Ando-san)
  (defadvice utf-translate-cjk-load-tables
    (after my-ad-circled-digit activate)
    (dotimes (i 20)
      (let ((unicode (+ #x2460 i))
            (char (+ 54433 i)))
        (if (utf-translate-cjk-substitutable-p unicode)
            (puthash unicode char ucs-unicode-to-mule-cjk))
        (puthash char unicode ucs-mule-cjk-to-unicode))))
  ;; prevent to use half-width marks (by Nanba-san)
  (utf-translate-cjk-set-unicode-range 
   '((#x2e80 . #xd7a3)
     (#xff00 . #xffef)
     (#xa7 . #xa7)                        ;
     (#xb0 . #xb1)                        ;
     (#xb4 . #xb4)                        ;
     (#xb6 . #xb6)                        ;
     (#xd7 . #xd7)                        ;
     (#xf7 . #xf7)                        ;
     (#x370 . #x3ff)                      ; ギリシャ
     (#x400 . #x4ff)                      ; キリル
     (#x2000 . #x206f)                    ; 一般句読点
     (#x2103 . #x2103)                    ; ℃
     (#x212b . #x212b)                    ; 〓
     (#x2190 . #x21ff)                    ; 矢印
     (#x2200 . #x22ff)                    ; 数学記号
     (#x2300 . #x23ff)                    ; 技術記号
     (#x2460 . #x2473)                    ; 円囲み数字
     (#x2500 . #x257f)                    ; 罫線
     (#x25a0 . #x25ff)                    ; 幾何学模様
     (#x2600 . #x26ff)                    ; その他の記号
     ))
  ;; C. end

  ;; ============= Japanese language setting ======================

  )

;; end