Palm84 某所の日記

死のうは一定、しのびクマには何しよぞ...

KNOPPIX でファイル名が文字化けしたでござるの巻(FAT編)

KNOPPIX の記事一覧

2011.8.18 原因・対処とか間違ってました。すみません。。。

f:id:palm84:20181220152338p:plain

KNOPPIX など最近の Linux LiveCD はアイコンクリックでマウントできて便利になってますが、USBメモリなどFAT(16/32) パーティションでは日本語ファイル名が文字化けすることがありますねんなお話。

USBメモリなどFATを使用する場合は、確認のために事前にWindows上で日本語名なファイルを保存しておくことを強くおすすめ致す次第と存じ奉りまする。。

INDEX

尚、Linuxユーザーにとっては超基本的言わずもがなことゆえ知らない人は全く知らない、関係ない人には全く関係ないことなのかもしれませぬー。

【注意】フォーマットが FAT の場合でござる!

ここに書いてる例は、USB HD(USBメモリ)などのフォーマットが FAT(FAT32/FAT16) の場合でござりんす。フォーマットがNTFSの場合は英語版OSを除き文字化けは殆ど起こらないと思われます。

ファイル名の文字コードとエンコード

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

NTFSは Unicode ですがUSBメモリなど FAT(16/32) では Shift_JIS によってエンコードされとるわけですな。

参考リンク

問題が出るパターン

【2011.8.18 追記】原因については浅薄な勘違い、というかよくわかってませんでした。すみません。。。

NTFSとFATは同じではござらぬ!

codepage=932 で一応おkですが正確には codepage=cp932 です(汗)。

Windows でFATに保存したファイル名が KNOPPIX で文字化け
原因

マウント時に codepage=932 指定されない。cp437, cp850 などで処理される(?)

マウント時に codepage=932, iocharset=utf8 指定されない。

対処

iocharset=utf8(及び codepage=932)を指定して再マウントすればおk

KNOPPIX でFATに保存したファイル名が Windows で文字化け

NTFS上でちゃんと表示されてたんでFATへそのままコピー。KNOPPIX 上でおk、されど Windows で見たら文字化けしたがじゃ。

原因

FATのマウント時に codepage=932 指定されない。cp437, cp850 などで保存される(?)。しかし Windows 上では cp932 で処理されるため。

マウント時に codepage=932, iocharset=utf8 指定されない。

対処

同じPCでやり直す場合は・・・

  • KNOPPIX 上で表示が正常なNTFS領域へコピー
  • or ネットワークでWindowsマシンへコピー
  • or USBメモリを KNOPPIX 起動前にNTFSフォーマットしておいて、コピー
  • or FATなUSBメモリなら iocharset=utf8(及び codepage=932)を指定にて再マウントしてからコピー(※ 後述)

或いは、移動先の Windows が起動できるPCで KNOPPIX 起動させてとか。

  • (Windows 上では文字化けでも KNOPPIX上では正常な筈なので)USBメモリ内のファイルを内蔵HDなどNTFS領域へコピー

再マウントするには

KNOPPIXを使う前に・・・

確認のために事前に Windows 上で使用するUSBメモリなどに日本語名のファイルを保存しておきませう。

Windows で保存した日本語名ファイルが正常表示されない場合は再マウントが必要になります。

  1. FATパーティションのマウントポイント(or デバイス名)を確認 - /media/sdx1 など
  2. アンマウント(マウント解除)する
  3. codepage=932,iocharset=utf8 を指定して再マウント

※ KNOPPIX ではデバイス /dev/sdb1通常マウントポイント /media/sdb1 にマウントされる。小容量USBメモリなどでパーティションが切られていない(大容量FD形式)の場合は最後の数字(パーティション番号)はありませぬ。

【追記】 /media/<ボリュームラベル名> の場合もありますな。

まず、マウントポイント名の確認!

f:id:palm84:20181220152341p:plain

下記はデバイス /dev/sdb1、マウントポイント /media/sdb1 の場合です!

コンソール(ターミナル・エミュレーター)でコマンド打つべし!

左下のアイコン...

f:id:palm84:20181220152344p:plain

またはメニューから...

f:id:palm84:20181220152349p:plain

基本的には・・・

-o utf8 のみの追加指定でおkかもしれません。念のため基本通りやった方がいいかと思いますけど。

  • 一例:
$ sudo umount /media/sdb1
$ sudo mount -o utf8 /media/sdb1

f:id:palm84:20181220152352p:plain

  • アンマウント(マウント解除)
$ sudo umount /media/sdb1
  • オプション指定してマウント
$ sudo mount -t vfat -o codepage=932,iocharset=utf8,shortname=winnt,uid=knoppix,gid=knoppix /dev/sdb1 /media/sdb1

※ KNOPPIX では一般ユーザでもマウントできますが、オプションの変更・追加は sudo を使い root 権限で実行するナリ。

  • shortname=winnt - 英字の大文字小文字をそのままで
  • uid=knoppix,gid=knoppix (uid=1000,gid=1000) - root 権限でマウントしてるので指定しないとファイル・マネージャなどで削除など変更処理ができなくなる
参考ページ
【追記】コマンド打ったのに文字化けしたままやん!orz な場合

バージョン 7.x で確認してみまするとファイルマネージャーに設定がなかなか反映されないことがある模様です。

※ 確認のために事前に Windows 上で使用するUSBメモリなどに日本語名のファイルを保存しておきませう。

  1. ファイルマネージャ開いた状態でF5キー押す(更新する)
  2. ファイルマネージャをも一遍開きなおす
  3. ファイル名の日本語がキタ?

と、なりました。(ならなかったらすみません。orz)

バージョン 6.7.1(6.4.4) と 5.3.1 の違い

【追記】産総研版 7.0.2DVD、ライブCDの部屋さん版 7.0.3CD でも FAT は文字化けしてました

6.7.1(6.4.4)

【注意】産総研版の例です。ライブCDの部屋さん版 6.7.1, 7.0.3, 7.2.0 では文字化けは発生しませんでした。

FATのマウント時に codepage=932, iocharset=utf8 が指定されないので下記両方のパターン発生。

  • Windows で保存したファイル名が KNOPPIX で文字化け
  • KNOPPIX で保存したファイル名が Windows で文字化け

FATで日本語ファイル名を扱う場合は codepage=932, iocharset=utf8 指定で手動マウントが必定やき

5.3.1

基本的にはNTFS同様FATでも問題ないことが多いです。しかし、日本語ファイル名のないFATをマウントする際に codepage=932, iocharset=utf8 が指定されない場合があるがじゃ。

  • KNOPPIX で保存したファイル名が Windows で文字化け

確認のため事前に Windows 上で日本語名ファイルを保存しときませう。

オプションなどを確認

コンソール(ターミナル・エミュレーター)でコマンド打つべし!

デフォルトで指定される mount のオプションを確認するには cat /etc/fstab と打ちます

KNOPPIX日本語版ではファイル /etc/fstab が起動時に編集されるのでこのファイルの内容を確認。6.4.4 では codepage が指定されません。

knoppix@Microknoppix:~$ cat /etc/fstab 
# DEFAULT BASE FSTAB, UNCONFIGURED
proc       /proc         proc       noauto             0 0
sysfs      /sys          sysfs      noauto             0 0
# Added by KNOPPIX
/dev/sr0 /media/sr0 auto ro,noauto,users,exec 0 0
# Added by KNOPPIX
/dev/sr1 /media/sr1 iso9660 noauto,users,exec 0 0
# Added by KNOPPIX
/dev/sda5 /media/sda5 vfat noauto,users,exec,umask=000,shortname=winnt,uid=knoppix,gid=knoppix 0 0
# Added by KNOPPIX
/dev/sda1 /media/sda1 ntfs noauto,users,exec,umask=000,uid=knoppix,gid=knoppix 0 0
# Added by KNOPPIX
/dev/sdb1 /media/sdb1 vfat noauto,users,exec,umask=000,shortname=winnt,uid=knoppix,gid=knoppix 0 0

マウント済の状態を確認するには mount と打ちます

knoppix@Microknoppix:~$ mount
rootfs on / type rootfs (rw,relatime)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
/dev/sr1 on /mnt-system type iso9660 (ro,relatime)
tmpfs on /ramdisk type tmpfs (rw,relatime,size=2097152k)
/dev/cloop on /KNOPPIX type iso9660 (ro,relatime)
unionfs on /UNIONFS type aufs (rw,relatime,si=9044977c,noplink)
unionfs on /home type aufs (rw,relatime,si=9044977c,noplink)
usbfs on /proc/bus/usb type usbfs (rw,relatime)
tmpfs on /UNIONFS/var/run type tmpfs (rw,relatime,size=10240k)
tmpfs on /UNIONFS/var/lock type tmpfs (rw,relatime,size=10240k)
tmpfs on /UNIONFS/var/log type tmpfs (rw,relatime,size=102400k)
tmpfs on /tmp type tmpfs (rw,relatime,size=2097152k)
udev on /dev type tmpfs (rw,relatime,size=20480k)
tmpfs on /dev/shm type tmpfs (rw,relatime,size=2097152k)
devpts on /dev/pts type devpts (rw,relatime,mode=1777)
cgroup on /cgroup/cpu type cgroup (rw,relatime,cpu,release_agent=/usr/sbin/cgroup-remove)
/dev/sdb1 on /media/sdb1 type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0000,dmask=0000,allow_utime=0022,codepage=cp850,iocharset=iso8859-1,shortname=winnt,errors=remount-ro)

6.4.4 では codepage=cp850,iocharset=iso8859-1 となっとりますですな。このままだと日本語ファイル名は KNOPPIX上では正常でもWindows上で文字化けしてしまいます。

5.3.1 では

必ずではないけどまっさらのUSBメモリなどでKNOPPIX上では正常・Windowsで文字化け状態となることもがあります。

その場合のオプションはこんなかんじでした。

/dev/sda1 on /media/sda1 type vfat (rw,nosuid,nodev,uid=1000,gid=1000,fmask=0000,dmask=0000,codepage=cp437,iocharset=iso8859-1,shortname=winnt)

この例では ,codepage=932,iocharset=utf8 で再マウントすればおk!でした。