本文へジャンプ

Windows のファイル名の文字コードについて

内容/目次

インターネット上で「Windows のファイル名の文字コードは SJIS が使用される」という情報が散見されますが、正確には、Windows2000, WindowsXP などの NT 系 Windows カーネルでは、Windows カーネル内部では、ファイル名は全て Unicode で扱われており、状況によって SJIS への変換が行われます。

具体的には、次のような動作になります。

    (1) Windows カーネル内部では Unicode を使用
    (2) NTFS ファイルシステムに保存する際は Unicode を使用
    (3) CIFS プロトコルによるファイル転送の際は Unicode を使用

    (4) FAT32 ファイルシステムに保存する際は SJIS に変換して保存
    (5) Windows 上で稼動するアプリケーションには、Windows カーネルが SJIS に変換して渡す

従って、Windows 上のファイルを扱う場面に応じて、文字コードを正しく意識して操作する必要が発生します。特に、下記の "MICRO SIGN" の様に Unicode には存在するが SJIS には存在しない文字をファイル名に含む場合は、注意が必要です。



以下に具体例で説明しますが、基本的には、Windows で使用するファイル名には、SJIS 非対応文字は使用しないことをお勧めします。


(A) ファイル圧縮ツールを使用する場合
    (1) NTFS ファイルシステム上のファイルを Windows のファイル圧縮ツール(zip, lha など)で圧縮ファイルにまとめると、Windows カーネルは、ファイル名を Unicode -> SJIS 変換してファイル圧縮ツールに渡し、ファイル圧縮ツールは、SJIS のファイル名で圧縮ファイル内に保存します。

    (2) (1) の圧縮ファイルを NTFS ファイルシステム上に解凍すると、ファイル圧縮ツールは SJIS のファイル名でファイルを展開し、Windows カーネルは、ファイル名を SJIS -> Unicode 変換して、NTFS ファイルシステムに保存します。

⇒ この時、ファイル名に SJIS に存在しない文字があると、圧縮・解凍時の文字コード変換がうまくできないため、エラーが発生したり、解凍するとファイル名に文字化けが発生したりすることがあります。

    (3) (1) の圧縮ファイルを Linux に持っていき、Linux 上のツールで解凍すると、(Linux 上のツールが文字コード変換機能を持たない場合)Linux 上のツールは、SJIS のファイル名のままでファイルを解凍して、ファイルシステムに保存します。

⇒ この時、Linux の端末の文字コード設定が SJIS 以外の場合、端末上でファイル名に文字化けが発生します。


(B) FTP クライアントでファイル転送する場合
    (1) NTFS ファイルシステム上のファイルを Windows の FTP ツールで Linux に転送すると、Windows カーネルは、ファイル名を Unicode -> SJIS 変換して FTP ツールに渡し、(FTP ツールが文字コード変換機能を持たない場合)FTP ツールは、SJIS のファイル名で Linux にファイルを転送します。

⇒ この時、Linux の端末の文字コード設定が SJIS 以外の場合、端末上でファイル名に文字化けが発生します。


(C) Samba サーバーにファイルを転送する場合
    (1) NTFS ファイルシステム上のファイルを Samba サーバーの共有フォルダーにコピーすると、CIFS プロトコルにより、ファイル名は Unicode のままで Samba サーバーに転送されます。

    (2) Samba サーバーがローカルのファイルシステムにファイル保存する際は、smb.conf の unix charset の設定に従って、ファイル名の文字コードを変換して保存します。unix charset = UTF-8 の場合は、Unicode のままで保存します。unix charset = CP932 の場合は、SJIS に変換して保存します。

    ※ smb.conf の dos charset は、Windows98 などの Unicode を使用しない Windows カーネルと通信する際のファイル名の文字コードを指定するもので、NT 系の Windows カーネルと通信する際は、このオプションは無視されます。

⇒ unix charset = CP932 で、ファイル名に SJIS に存在しない文字があると、文字コードの変換が正しく行われず、文字化けなどの現象が発生します。基本的には、unix charset = UTF-8 を使用することをお勧めします。

文書情報

有効期限: 2050年12月31日

本文書について

本文書では、IBM製品においてLinuxを使用する上で有用と思われる技術情報やHints&Tipsをご提供いたします。
本文書の情報は、限られた検証環境における結果に基づくものであり、全ての環境で同一の結果を保証するものではありません。
本文書の情報に基づき導入・設定を実施される場合には、十分な検証テストを行ってください。
また、予め各社より提供される情報および製品のマニュアルをご覧ください。
本文書の情報に基づいて導入・設定・運用した結果について、IBMはいかなる保証も責任も負いかねますので予めご了承ください。

ソフトウェアサポート

ソフトウェア製品のサポート技術情報

ハードウェアサポート

ハードウェア製品のサポート技術情報