Q 質問 Windows 上の日本語ファイルをLinux サーバーにコピーしたら,文字化けが起きてしまいました。考えられる原因と対策を教えてください。

A 回答 OSによって標準の日本語文字コードが異なるためであり,ツールを使って文字コードを変換します。


写真1●FTPでWindowsからLinuxへ転送したファイル

 WindowsとLinuxは,標準の日本語文字コードとして,異なる文字コード体系を採用しています。Windowsで作成した日本語データは,本来Linuxで表示できません。多くの場合はアプリケーションがどの文字コードが使われているか自動判別して表示し,コードの違いを吸収しています。

 文字化けが生じるのは,アプリケーションが対象ファイルで使われている日本語文字コードに対応していない場合など,違いを吸収しきれない時です。また,LinuxやUNIX上でWindows NT/2000サーバーをエミュレートするSambaなどは,使用する文字コードを設定ファイルで指示できますが,その指定を誤ると,文字化けが発生します。

LinuxはEUCが標準

 日本語を扱う主要な文字コードは4種類あります(表1)。Windowsが標準としているのはシフトJISです。一方,日本語対応のLinuxや,ほとんどのUNIXではEUC(Extended Unix Code)を標準としています。

 WindowsからUNIXへ,日本語ファイル名のファイルをFTPでファイル転送してみましょう。Windowsからは正常にファイル名が見えますが(写真1a),同じファイル名をLinuxのリモート・コンソール上で見ると,化けてしまいます(写真1b)。



シフトJIS WindowsやMacintoshなどで使用される。半角カタカナは1バイト,全角文字は2バイトで表現する
EUC(Extended Unix Code) 日本語LinuxなどほとんどのUNIX系OSで使用される。2バイトで1文字を表現する
JIS(ISO-2022-JP) 文字列中で日本語開始と終了を示す「エスケープ・シーケンス」符号を使用する。2バイトで1文字を表現する
Unicode Windows NT/2000が内部コードとして使用している。すべての言語の文字を統一して表現することを目指している。いくつかの形式があり,UTF-16と呼ぶ形式では英数字も2バイトで表現する。UTF-8と呼ぶ形式では英数字は1バイトであり,1文字を3バイトや4バイトなどほかのバイト長で表現することもある。
表1●日本語を扱う主な文字コード

Sambaはファイル名を自動変換

 対策としては,ファイル名の文字コードを変換するのが一つの方法です。Linux向けには,SMBCHARTOOLというツールがあり,ファイル名を一括して変換できます。日本Sambaユーザー会のサーバー(http://www.samba.gr.jp/)などから入手できます。

 また,Sambaは転送の際に日本語ファイル名の文字コードを自動的に変換してくれます。Sambaの設定ファイルであるsmb.confの[global]セクションに記述する,
client code page = 932
がクライアント(932はシフトJIS)
coding system = euc
がサーバー側の文字コードです。この指定が誤っていると,文字化けの原因になりますので注意してください。

HTMLのMETAタグに注意

図1●WWWブラウザで閲覧した場合の文字化け
HTMLファイルのMETAタグの指定と実際の文字コードが異なる場合

 ファイルの中身の文字コードを変換するツールとしては,nkfなどがあります。UNIXとDOS向けの,コマンド・ラインで使用するツールです。nkfをWindowsのGUIで使えるようにしたEasy nkfというツールもあります。ベクター(http://www.vector.co.jp/)など,オンライン・ソフトウエアを集めたサイトで入手できます。

 そのほかに文字化けが起きるケースとしては,Internet Explorerでは正常に見えるHTMLをLinux上でNetscape Navigatorで見ると文字化けするというものもあります。

 原因として考えられるのは,ファイル中で指定した文字コードと,実際の文字コードが異なることです。HTMLでは,使用する文字コードをMETAタグ中のcharset値で指定できます。例えばあるHTMLをひな型として使ったが,異なる文字コードで記述したのに,METAタグのcharset値を変更し忘れたというケースです(図1[拡大表示])。

 図1のケースでは,Internet Explorerは文字コード指定が間違っていても自動判別し,正常に表示します。しかし,Netscape Navigator(Windows版含む)ではMETAタグの指定を優先するため,文字化けします。charset値を正しく指定するか,charset指定を削除することで解決できます。

 また, などは,OSごとにコード割り当てが異なる「機種依存文字」と呼ばれる文字です。LinuxやMacintoshでは文字化けを起こしますので,使用を控えましょう。

(本誌)

2000年3月22日追記:
「表1●日本語を扱う主な文字コード」のUnicodeの項に「英数字も2バイトで表現する」とありましたが,Unicodeには英数字を1バイトで表現するなどこれ以外の形式もあり,正確な表現ではありませんでした。お詫びいたしますともに,本文を修正いたします。(日経オープンシステム)