« APFS再検証 | トップページ | UTF-8-MAC検証 »

2017年2月 2日 (木)

HFS+のFile名格納

APFSのPOSIXレイヤーでのUTF8でのFile名格納を確認したついでに、HFS+のFile名格納も調べてみた。

俗称、「UTF-8-MAC」でOSのAPIからはFile名格納が読み出される。DISKの記録上はどう格納されているのか? 確認してみよう。

[方法]
1. USBメモリをHFS+でフォーマット。
2. Terminalから、touch "がば" で空File作成
3. ls /dev でUSBメモリのデバイス位置を確認したら、
4. diskutil unmount /Volumes/FREE でアンマウント、
5. cd ~/Desktop
6. sudo dd if=/dev/disk1 of=a.iso でiso化する。

結構時間がかかる。あとはバイナリ・エディタでひらいてサーチすればいい。
が = UTF8では E3818C、UTF16では 304C
か = UTF8では E3818B、UTF16では 304B
ば = UTF8では E381B0、UTF16では 3070
は = UTF8では E381AF、UTF16では 306F
”  = UTF8では E38299、UTF16では 309B

UTF-8-MAC ならE3818BE38299E381AFE38299
UTF8なら E3818CE381B0
UTF16 なら 304C3070、正規化されてるなら304B309B306F309B

Hfsfilename

ありました、UTF-8-MACだけヒット。やはりHFS+はFile名は「UTF-8-MAC」で格納されています。

同じようにUS-ASCll領域(1byte)で、"BAKADANA" をtouchしてisoをバイナリ検索・・・
42414B4144414E41 でヒットしない。あれ?
UTF16の 420041004B004100440041004E0041 だとヒットするじゃないですか! ん?でもコレ、Spotlightのインデックスですかね? あとはジャーナル記録もUTF16っぽい。

1bytehfs

US-ASCII圏の人がこれを見て、HFS+は「UTF16でDisk上に記録してる」と早トチリするのはまぁ納得ですね。でもコレはFile名管理領域ではないのです。Spotlightのインデックス内容なのです。

じゃ、日本語と1byte混在の「あらbakaイヤン」で調査。(笑)日本語部分はUTF-8-MACです。baka=312F432F になり、UTF8の62616B61になってない。 大文字アルファベットの次に小文字アルファベットが続くという独自仕様。これは新発見。

つまり結論は、「HFS+のFile名はAPI上はUTF-8-MACである。DISK上は1byte部分は独自エンコードでそれ以外はUTF-8-MACで記録されているっぽい。」さらに、「Spotlightとジャーナル記録はUTF16らしい。」が新たにわかった新事実。

ジャーナルとSpotlightを切ってダンプすればハッキリするんだけど。。

web上の情報をただ見つけただけで鵜呑みにせず、自分で確認することが大事ですね。規格を盾に正論展開するのも私はイヤだな。WiKiなんて半分ウソが書いてあると思ってます。(笑)

|

« APFS再検証 | トップページ | UTF-8-MAC検証 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: HFS+のFile名格納:

« APFS再検証 | トップページ | UTF-8-MAC検証 »