M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2004年8月 3日 05:30

MacOSXのファイルシステムはファイル名としてUTF-16で510byteまで(サロゲートペア可)それにひきかえLinux+Netatalk2(UTF-8)は85文字程度

このエントリーをはてなブックマークに追加 mixiチェック

netatalk_icon_2.pngMacOS X で長いファイル名がどうたらとくだまいたことがありましたが、

void GraphicWizardsLair( void ); // [otsune.com] 経由、
MacintoshとWindowsファイル送信の掟 (MacとWinの共存) [nifty.com]

OS Xでは、HFS+使用時にはUTF-16で510バイトまで。サロゲートペアは4バイト、合成文字は4バイト以上使うので、それらを含むと255文字になりません。Terminal等のUNIX系アプリケーションで使う時にはUFT-8になります。

UTF-16 で 255 文字っぽいていうところまでは調べていたんですけれども、サロゲートペアまでは考えなんだ。そういえばファイル名に変な名前付けられますよね、MacOS X。

さてさて、Fedora Core 2 に入れた Netatalk 2.0β1(β2はまだ入れていません)のファイルサーバですけれども、普通に入れれば、Fedora Core = UTF-8、Netatalk 2 = UTF-8 なので、漢字等が 3 byte 使うという無駄エンコーディングである UTF-8 で行く限り、このシステムで付けられるファイル名の最大長は 85 文字程度になります(Linux 側のファイル名の長さが 255 byte なため)。

補足すると、UTF-8 は、ローマ字などは 1byte なので、1byte にエンコードされる文字で名前をつける限り、255 文字になるわけですね。

それ以前に、Netatalk 2.0β1 では、長いファイル名をつけたファイルがあるフォルダで、他のファイルが見えなくなる不具合があるようなので最初から極端に長いファイル名なんて使えません。Netatalk 2.0β2 で直っているっぽいので、そのうち試してみます。


(2004.8.3 6.20追記)

上記でも一部触れていますが、MacOS X では、合成文字も使えるのですが、「ば・ぱ」などの濁音・半濁音も MacOS X では合成文字として表現されているので、UTF-16上では 4byte、UTF-8上では 6byte(!) 使います。よって、Fedora Core 2 + Netatalk 2.0β1 でのファイル名の長さですけれども、全部濁音使えば int(255/6) で 42文字になってしまいます。

参考:
Mac OS XでWebDAVサーバ [nifty.com]

OS Xは、UnicodeのNormalization (正規化) として、かなの濁点半濁点つきの文字等は合成文字として、基底文字と結合文字 (濁点半濁点) に分離して保持する方式 (Normalization Form D) を使っています。結合文字に未対応のコード変換ツールやクライアントだと、そのまま2文字として扱ってしまい、結合文字としての濁点半濁点がShift_JISやEUC-JPには無く、Unicodeでも結合文字未対応の実装では使えないため、そこだけ変換できずに化けます。(Shift_JISにある「゛゜」はUnicodeの309Bと309Cですが、結合文字の方は3099と309Aです)

Unicode正規化 [nifty.com]

# 文字コード・Unicode関係詳しくないんで、詳しい方がこぞってツッコミいれてくれると(怖いけど)助かるのですが……


(2005.1.30 16.30追記)

むりくりDTP blog: netatalk 2ボリュームでのファイル名の長さの最大って結構短い。
にて、前回追記分のことを触れていたところに、おかしいのではないかという指摘が入りましたので、そちらの方を参照してください。netatalk 2がファイルシステムに書き込むときにはすでに Composition になっている訳なので、netatalk 2 の挙動の方が怪しいということです。

投稿 大野 義貴 [netatalk] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/263

コメントする