vfat 日本語ファイル名の文字化け

モデレータ: 暇人, YoN, nyu

返信する
アバター
ルビー
記事: 1240
登録日時: 14/11/24(月) 12:12

vfat 日本語ファイル名の文字化け

投稿記事 by ルビー »

vfatに、571JPとTahrpupをFrugalインストールしたとします。
この状態で、/mnt/home(vfat)に日本語ファイル名を作成すると、お互いの間で文字化けします。
ntfs、外付けUSBメモリーでは起こりません。

Tahrpup以降で、/mnt/homeのマウントの仕様が変わったらしく、TahrpupとXenialpupの間では起こりません。

自動マウントの/mnt/homeで起こる現象なので、mount オプションで調整はできません。
もしかして可能かもしれませんが、簡単ではないと思います。

日本語ファイル名をtarで固めておくか、他の場所に待避させておくしか、簡単な回避策はなさそうです。

私は、日本語ファイル名は極力避けているので、あまり問題にはなりませんが、もし、大量にあると厄介です。

571JPからTahrpup、Xenialpupに移行して、後になって気が付いた場合、ちょっと悲惨な状況になるかもしれません。
thinkpadnerd
記事: 2035
登録日時: 15/10/25(日) 14:00

Re: vfat 日本語ファイル名の文字化け

投稿記事 by thinkpadnerd »

家では vfat 上の 571JP については該当するマシンがないので確認できませんが、vfat な ThinkPad T42 では以下のような状況です。

Puppy 412 と Lupu 528
Windows で日本語名をつけたファイル・フォルダ---???と表示される
これらの Puppy で作成した日本語名つきファイル・フォルダ---正常

Slacko 5.7 + lang_pack
Windows で日本語名をつけたファイル・フォルダ---正常
他の Puppy で作成した日本語名つきファイル・フォルダ---文字化け

時期的に win9x と混在していたからか、vfat な XP マシンは多いと思われます。
mp3 ファイル等は、埋め込まれたタグ(曲名・アーティスト名)の文字コードもからんでくるので、厄介です。
ThinkPad X121e (Precise 571 / Tahr 605 / Tahr64 606 / Xenial 7.5 / Bionic32)
CPU AMD C-50 1.0GHz, RAM 4GB
ThinkPad L440 (Xenial 7.5 / Bionic64 / Fossa64)
CPU intel Celeron 2950M 2.0GHz, RAM 4GB
thinkpadnerd
記事: 2035
登録日時: 15/10/25(日) 14:00

Re: vfat 日本語ファイル名の文字化け

投稿記事 by thinkpadnerd »

ThinkPad T42 のハードディスクは以下のような構成です。

/dev/sda1 --- vfat, windows と puppy が何匹か同居
/dev/sda2 --- ext2, tahrpup (save to directory)

tahrpup で sda1 をマウント(アイコンクリック)すると、
windows で作成した日本語名のファイルは正常
puppy 412 で作成した日本語名のファイルは文字化け

# mount -t vfat /dev/sda1 /mnt/sda1 で手動マウントすると、
windows で作成した日本語名のファイルは???
puppy 412 で作成した日本語名のファイルは正常

以前の Linux は /etc/fstab に設定を書いていたと思いますが、 pMount は /etc/mtab (これ自体はリンク)を見ているようです。それによると、sda1 は、cp437 !
一般に windows の エンコードと言われている cp932 ではないのです。

追記
Slacko 5.7 の sda1 設定も cp437 になっていました。(Slacko 5.7 はカーネルが 571JP よりも新しい)
この件は Puppy だけの問題ではなくて、Linux 全体の流れではないかと思います。
ThinkPad X121e (Precise 571 / Tahr 605 / Tahr64 606 / Xenial 7.5 / Bionic32)
CPU AMD C-50 1.0GHz, RAM 4GB
ThinkPad L440 (Xenial 7.5 / Bionic64 / Fossa64)
CPU intel Celeron 2950M 2.0GHz, RAM 4GB
アバター
ルビー
記事: 1240
登録日時: 14/11/24(月) 12:12

Re: vfat 日本語ファイル名の文字化け

投稿記事 by ルビー »

thinkpadnerd さんが書きました:mp3 ファイル等は、埋め込まれたタグ(曲名・アーティスト名)の文字コードもからんでくるので、厄介です。
ファイル埋め込みのタグは、リッピングのアプリが書き込むので、文字化けはしないと思いますが、ディスクの文字コード設定も絡んでくるのでしたっけ?

thinkpadnerdさんの実験を読んでいて、そう言えば、431JP2012でも日本語ファイル名で似た様な事があったのを思い出しました。
ただ、初めてのパピー(Linux)だった事もあって、やる事が一杯で、細かい事を覚えていませんでしたが、メモ書きを探したら見つかりました。

それによると、SDHCカード(vfat)起動では、Windowsの日本語ファイル名が文字化けすると書いてありました。
日本語ファイル名は、Windowsのアプリの2個だけだったので、私はそれを半角英字でリネームしたのでした。
やがて、その事も記憶から無くなっていました(^^;。

リッピングで日本語ファイル名ができても、MP3ファイルは容量を食うので、音楽プレーヤーに移動してしまいます。
不可避的な日本語ファイル名しかない状態なので、あまり文字化けは見かけませんでした。

Win XPで、vfat(/mnt/home)に日本語ファイル名を作って、571JPで見ると「??」で文字化けします。
Tarpupで作った日本語ファイル名と同じ化け方です。
571JPで作ってTahrpupから見ると、文字化けは豆腐文字になっています。

571JPで作った日本語ファイル名は、Win XPで化けます。
Tahrpupでは、XPとの日本語ファイル名に問題は無しです。
thinkpadnerd さんが書きました:以前の Linux は /etc/fstab に設定を書いていたと思いますが、 pMount は /etc/mtab (これ自体はリンク)を見ているようです。それによると、sda1 は、cp437 !
私は、mountコマンドで調べたのですが、出力を571JPとTahrpupで見比べてみると、どちらもcp437でした。
cp437って何だろうとググっても、良く分からない。
文字コード絡みの事は、ややこしい割に苦労に見合った利益は得られないと思うので、スルーでいいか、文字コード嫌いと思いつつ調べてみると、原因らしき物を見つけました。

mountコマンドの出力(sdc1 = /mnt/home)
長いので改行してます

571JP
/dev/sdc1 on /initrd/mnt/dev_save type vfat (rw,relatime,fmask=0022,dmask=0022,
codepage=cp437,iocharset=iso8859-1,shortname=mixed,quiet,errors=remount-ro)

Tahrpup
/dev/sdc1 on /initrd/mnt/dev_save type vfat (rw,relatime,fmask=0022,dmask=0022,
codepage=437,iocharset=iso8859-1,shortname=mixed,quiet,utf8,errors=remount-ro)

この「utf8」の有無が互いに文字化けする原因で、あるのが日本語ファイル名にとって正しい設定みたいです。
英語環境では無い場合がある様です。
codepage=437のcpが抜けているのが気になったのですが、これは問題なさそう。
Tahrpup以降、マウントの仕様が変わったと言うより、正しい仕様になったと言う事らしいです。

6.X系のトラブルで書いちゃったけど、5.X系の方に書いた方が適切だったかも。
まあ、vfat限定の現象なので、今時、ハードディスクをvfatでフォーマットして使う人もいないだろうから、あまり問題ないかな。
パピーをSDカードやUSBメモリーにインストールして、日本語ファイル名を多用する場合が、要注意ですね。

パピーを入れたSDHCカードを別の新しいカードに移し換えた時も、日本語ファイル名で苦労しました。
パピーの自動マウントでrsyncして、そのカードで起動すると化ける。
いろいろ試して、オプション無しの手動マウントで、化けなくなりました。

日本語ファイル名って本当にトラブルメーカーだと思うけど、使えないのも不便だし、適当に折り合いを付けるしかないかな。
thinkpadnerd
記事: 2035
登録日時: 15/10/25(日) 14:00

Re: vfat 日本語ファイル名の文字化け

投稿記事 by thinkpadnerd »

”ルビーさんが書きました:
> ファイル埋め込みのタグは、リッピングのアプリが書き込むので、文字化けはしないと思いますが、
> ディスクの文字コード設定も絡んでくるのでしたっけ?

ディスクの文字コード設定は関係しませんが、windows 上で作成した mp3 ファイルは当然タグもシフトjisなので困ります。
また、id3tag の規格がいくつかあって、ミュージックプレーヤによって対応がまちまちなので、linux で作成した mp3 でも文字化けする(または表示不能になる)場合があります。

> 出力を571JPとTahrpupで見比べてみると、どちらもcp437でした。

肝心の 571JP を調べなかったのは、一歩踏み込みが足りなかったようです。 :oops:

> 日本語ファイル名って本当にトラブルメーカーだと思うけど、使えないのも不便だし、適当に折り合いを付けるしかないかな。

今回の問題とはちょっと違いますが、dos/win3.1 を使っていた頃は 8.3 形式のファイル名を付けるのに苦労していました。(日本語だとたった4文字) どうやってファイルの中身が分かるように命名しようかと考えたものです。
ThinkPad X121e (Precise 571 / Tahr 605 / Tahr64 606 / Xenial 7.5 / Bionic32)
CPU AMD C-50 1.0GHz, RAM 4GB
ThinkPad L440 (Xenial 7.5 / Bionic64 / Fossa64)
CPU intel Celeron 2950M 2.0GHz, RAM 4GB
Zstep
記事: 207
登録日時: 16/12/06(火) 12:49

Re: vfat 日本語ファイル名の文字化け

投稿記事 by Zstep »

571JPとTahrpupの/mnt/home(vfat)のマウントオプションの違いはinitrd.gzの中のinit

Tahrpup,Xenialpupは
VFAT_OUT_PARAM='shortname=mixed,quiet,utf8'
571JPは
VFAT_OUT_PARAM='shortname=mixed,quiet'

このあたりかも

571JPノーマル
capture6281.png
initにutf8を追記してinitrd.gzを作り替えた571JP
capture7680.png
添付ファイルを見るにはパーミッションが必要です
アバター
ルビー
記事: 1240
登録日時: 14/11/24(月) 12:12

Re: vfat 日本語ファイル名の文字化け

投稿記事 by ルビー »

Zstep さんが書きました:このあたりかも
ありがとうございます。
できました。 :D

initrd.gz
init
616行目

VFAT_OUT_PARAM='shortname=mixed,quiet'
  ↓
VFAT_OUT_PARAM='shortname=mixed,quiet,utf8'

これで、ノーマル、修正版571JP、Tahrpup、Win XPでお互いに日本語ファイル名を作って、見え方を調べました。
571JPの日本語ファイル名の扱いが、Tahrpup以降と同じになりました。

Tahrpupのinitのコメントで、
#140102 rodin.s: added utf8-option to VFAT_OUT_PARAM for flash drive to be mounted with utf-8 if boot is done from flash drive
とあるので、やっぱり問題にはなっていたって事かな。

Zstepさんがせっかく解決策を調べてくれたのに、あれですけど、571JPの運用中にこの変更を加えるのはちょっと微妙な気がします(^^;。
今、存在する日本語ファイル名が文字化けしてしまう訳だし。
現状で困っていなければ、現状のままで使うのが良いかなと思います。

この手の事は使い始めから適用しないと、かえって混乱の元になるので、571JP配布版の元から修正が入るのが、一番良いですね。
返信する