LinuCレベル3 300試験の例題と解説
392.5 国際化
今回は300試験の試験範囲から「主題392Sambaの基礎」の「392.5 国際化」についての例題を解いてみます。
■トピックの概要
このトピックの内容は以下の通りです。
<392.5 国際化>
重要度 1
<説明>
国際化された文字コードとコードページに対処できること。
<主要な知識範囲>
・国際化された文字コードとコードページを理解する
・非英語環境において、共有、ファイル、ディレクトリ名における、Windows と Linux / Unix の間での名前空間の相違を理解する
・非英語環境におけるユーザとグループの名前付け規則における、WindowsとLinux/UNIXの間での名前空間の相違を理解する
・非英語環境におけるコンピュータの名前付け規則における、WindowsとLinux/UNIXの間での名前空間の相違を理解する
<重要なファイル、用語、ユーティリティ>
・国際化
・文字コード
・コードページ
・smb.conf
・dos charset、 display charset および unix charset
■例題
Linuxに設定したsamba共有をWindowsのドライブに割り当て、コマンドウィンドウでDIRコマンドを実行したところ、
日本語のファイル名が化けた。
下記はsmb.confの一部だが、修正すべき行は次のうちどれか。なお、Windowsの地域設定は日本語である。
1. unix charset = UTF-8
2. display charset = UTF-8
3. dos charset = UTF-8
4. default case = lower
5. case sensitive = yes
※この例題は実際の試験問題とは異なります。
解答と解説
答えは3. dos charset = UTF-8 です。
日本語Windowsのコマンドウィンドウでは、CP932が使用されるので、dos charset = CP932 とする必要があります。 LinuxとWindowsという異種OS間でファイルを共有すると、さまざまなトラブルに遭遇します。 これらをスマートに解決するには、下記に挙げるLinuxとWindowsのファイルシステムおよびファイルの違いを理解しておくことが重要です。 1.ファイル名の制約の違い 2.ファイル内の文字セットの違い 3.改行コードの違い 4.BOM(Byte Order Mark) 1.ファイル名の制約の違い Windowsではファイル名の大文字小文字は区別しせんが、Linuxでは区別します。また、LinuxはUTF8、WindowsのコマンドウィンドウではCP932の文字セットを使用するので、日本語のファイル名を正しく処理するには文字セットを正しく設定する必要があります。 なお、Windowsのエクスプローラで参照する場合は問題となりません。例えば、日本語(CP932)のファイル名と韓国語(CP949)のファイル名はエクスプローラでは正しく表示されます。 2.ファイル内の文字セットの違い Windowsでは地域の設定により使用される文字セット(コードページ)が決まり、日本語環境ではCP932を使用します。WindowsのコマンドウィンドウでCHCP コマンドを引数無しで実行すると、現在のコードページが確認できます。 一方、LinuxではUTF8が使用されていますが、ユーザごとに使用環境に合わせてlocaleのLC_CTYPEで指定する文字セットに指定が可能です。localeコマンドで現在の設定を確認できます。 3.改行コードの違い Windowsではテキストファイルの行末にCR+LFが使用されますが、LinuxではLFのみが使用されます。 CRは復帰(Carriage Return)コードで、LFは改行(Line Feed または New Line)コードで、16進表記(Hexadecimal)でLFが0a、CRが0dになります。 man ascii コマンドで確認してみてください。 下記は a.txt を odコマンドを使用してASCIIコードまたは16進(Hexadecimal)で表示した例で、a(61), b(62), c(63), nl(0a)であることがわかります。 $ echo abc > a.txt $ od -axv a.txt 0000000 a b c nl 6261 0a63 0000004 4.BOM(byte Order Mark)の違い Windowsのアプリケーションは、ファイルをUnicodeで保存する時にBOMをファイルの先頭に挿入し、読み込み時にはBOMにより文字セットを識別しています。しかし、Linuxでは特にBOMを意識していないため、LinuxでUnicode(例えばUTF8)で作成した a.txt ファイルをWindowsで開いたときに文字が化けする可能性があります。逆に、Windowsで生成したUnicodeのファイルをLinuxでデータベースに取り込んだときに「何やらゴミが混入している」といった問題が発生する可能性があります。 下記は、Windows7のメモ帳(notepad)で、'xyz(改行)'を入力して、 「名前を付けて保存」で「文字コード」に'UTF-8'を指定して保存したx.txtに対しLinuxのodコマンドを実行した例です。なお、文字コードにANSIを指定すると、そのWindowsのコードページで保存されます。 xyz の前の ef bb bf は、この場合のBOMです。また、改行が cr(0d) nl(0a)(LF) であることがわかります。 $ od -axv x.txt 0000000 ? ? ? x y z cr nl bbef 78bf 7a79 0a0d 0000010 その他、FTP コマンドでファイルを転送する際のモードにbinaryとasciiがありますが、Windows-Linux間でasciiで転送するとテキストファイルの改行コードを変換(CR+LF⇔LF)してくれます。binaryで転送した場合、改行コードを変換しないため、viで開いた場合に CRコードが ^M で表示されたりします。 その他の参考として、Windows環境でディレクトリパスの区切り文字の「\」円マークと「\」バックスラッシュは同じASCIIコード(0x5C)ですが、CP932環境では、円マークとして表示されます。表示環境の差で発生する違いであることも知っておきましょう。
■例題作成者 LPI-Japan 中谷徹