知識情報演習I後半のページへもどる

文字コードに関する注意事項(知識情報演習I後半)

知識情報演習Iでは、Linux, Ruby, SQLite3の全てで共通して文字コードにUTF-8を使用するという前提で進めています。もし、EUC-JPやシフトJISなどの他の文字コードを使用すると正常に動作しない恐れがあります。

一方、Linux上の各種ツールは柔軟にできていて、デフォルトのUTF-8以外の文字コードになる場合があります。以下に注意すべきポイントを列挙するので、文字化けなどが生じる際はチェックしてください。

emacsで間違った文字コードのまま編集・保存してしまった場合

例えば、Windowsで作成したファイルをそのままLinux上のemacsで開いて編集・保存してしまうと、文字コード識別用のマジックコメントが挿入されて、nkf等で文字コード変換をしてもうまくいかない場合があります。そのような場合は、マジックコメントも同時に変更する必要があるので、emacs自身の文字コード変換機能を用いる方が簡単です。

Windowsで作成したシフトJISコードのファイルをemacsで編集・保存するとマジックコメントとして「-*- coding: cp932 -*-」と自動的に挿入されてしまっています。この時emacsで

Ctrl-X RET f (コントロールキーを押しながらx、次にEnterキー、そして f を押す)

の順にキーを操作すると文字コードをたずねてくるので、そこで「utf-8-unix」と入力してください。そして、ファイルへ保存(Ctrl-X Ctrl-S)すると、自動的にマジックコメントが「-*- coding: utf-8 -*-」に変わり、文字コードと改行コードもUTF-8でLinuxのものに変換されます。

なお、Windowsで作成したプログラムなどで既にマジックコメントとして「# encoding: sjis」のような行がある場合は、その行を削除しないとemacsによるマジックコメントの挿入がされないことがあります。(2014年5月27日追記)

以下の説明は平成24年度までの古いシステムでの説明なので細部が異なるかも知れませんが、参考までに残しておきます。

emacsでファイルに保存する際

(半角)英数字のみのテキストファイルをemacsで開いて編集し、日本語文字を挿入した場合、ファイルに保存する際にどの文字コードを用いるかたずねてきます。画面が2分割され、最下行(ミニバッファ)に

Select coding system (default utf-16-le):

と表示されます。このとき、必ず「utf-8」と入力してEnter(Return)キーを押してください(そのままEnterを押すとUTF-16-LEというコードになります)。

なお、正しくUTF-8コードになれば、最下行のすぐ上の行の左端に「u」(小文字のu)が表示されます。これが大文字の場合は異なるコードになっています。その場合は次項を参照してください。

emacsで間違った文字コードで保存してしまった際

UTF-8以外の文字コードでプログラムなどを保存してしまった場合は、emacsか「ステップ1の資料(LinuxでRuby編)」で紹介したnkfで文字コードを変換することができます。ここではemacsで行う手順を説明します。

emacsの最下行のすぐ上の行の左端が大文字の「u」以外の場合は文字コードがUTF-8以外のものになっています。その場合に文字コードをUTF-8にしてファイルに保存するには、

Ctrl-X RET f (コントロールキーを押しながらx、次にEnterキー、そして f を押す)

の順にキーを操作すると文字コードをたずねてくるので、そこで「utf-8」と入力してください。この手順はMeadowで文字コードを直す手順と同じなので、 「Meadowで作成したファイルが文字化けする場合の修復法」 の記述も参考になります(ただし、本演習ではsjisではなくutf-8を指定してください)。

emacsでUTF-8を選んでもおかしくなる場合

上記の説明に沿ってUTF-8を正しく選んでもファイルに保存すると最下行のすぐ上左端が小文字の「u」ではなく「J」などに変わってしまうことがあります。そのときはGNOME端末で以下のコマンドを実行してください。

locale

このとき

LANG=ja_JP.eucJP
LC_CTYPE="ja_JP.eucJP"
LC_NUMERIC="ja_JP.eucJP"
LC_TIME="ja_JP.eucJP"
LC_COLLATE="ja_JP.eucJP"
LC_MONETARY="ja_JP.eucJP"
LC_MESSAGES="ja_JP.eucJP"
LC_PAPER="ja_JP.eucJP"
LC_NAME="ja_JP.eucJP"
LC_ADDRESS="ja_JP.eucJP"
LC_TELEPHONE="ja_JP.eucJP"
LC_MEASUREMENT="ja_JP.eucJP"
LC_IDENTIFICATION="ja_JP.eucJP"
LC_ALL=

のように表示されます。この例の各行(最下行を除く)で右辺が「ja_JP.eucJP」となっているのが原因です。これは本来は「ja_JP.UTF-8」でなくてはなりません。

これは他の授業などでホームディレクトリにある設定ファイルを変更しているのが原因です。多くの場合は、

~/.bashrc

の中に

LANG=ja_JP.eucJP

のような行が追加されています。この行をエディタで削除して、ログインし直してください。そして改めてGNOME端末で locale コマンドを実行して

LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=

のように表示されれば問題はなくなります。

なお、「LANG=ja_JP.eucJP」の設定をするように指示された授業を並行して受講している場合は、授業担当者に相談するようにしてください。


by 授業担当者

知識情報演習I後半のページへもどる


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-05-27 (火) 11:12:22 (2998d)