高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

Technical Q&A QA1223
File Manager Text Encoding Hints


Q: Unicode ベースの Mac OS X アプリケーションを書いています。(FSRenameUnicode を使って)ファイルの名前を変更するときに、textEncodingHint パラメータに 0 を渡してもよいですか?

A: 一般的には、渡せません。Unicode ベースの File Manager API を使うときには、有効なテキストエンコーディングヒントを指定するか、または kTextEncodingUnknown を渡してテキストエンコーディングヒントがないことを明示する必要があります。ほとんどの場合、Unicode ベースのアプリケーションには適当なテキストエンコーディングヒントはありません。このため、0 ではなく kTextEncodingUnknown を渡すべきです。

値 0 は kTextEncodingMacRoman に相当し、これはファイル名の構成がローマ字であると思われていることを暗示しています。アプリケーションが Unicode を完全にサポートしている場合は、ローマ字かどうかはわからないため、テキストエンコーディングヒントについて誤った情報を提示していることになります。File Manager に誤った情報を指定するのはよいことではありません。誤ったテキストエンコーディングヒントは、おそらく Mac OS X の Finder のような Unicode ベースのアプリケーションには影響はありませんが、結局は、たとえば Classic と互換性を持たせた環境で実行するアプリケーションなど、非 Unicode のアプリケーションを混乱させることになります。

Unicode ベースのアプリケーションで File Manager のテキストエンコーディングヒントを扱うための簡単な規則を以下にいくつか示します。

  • File Manager にテキストエンコーディングヒントを指定するとき(たとえば、FSMakeFSRefUnicodeFSRenameUnicodetextEncodingHint パラメータに対して)は、kTextEncodingUnknown を使用します。
  • File Manager のオブジェクトについての情報を取得するときには、最善の方法はテキストエンコーディングヒントを要求しないことです(FSGetCatalogInfo への whichInfo パラメータの kFSCatInfoTextEncoding がクリアされていることを確認してください)。
  • 上記の規則に対しては重要な例外が 1 つあり、File Manager のオブジェクトをコピーするときには、常にテキストエンコーディングヒントをコピーする必要があります。File Manager オブジェクトをコピーする方法についての例は、FSCopyObject のサンプルコードを参照してください。

非 Unicode のアプリケーションの規則はさらに複雑になります。このケースへの対応を考えるよりは、Unicode への適合のために時間を割くことをお薦めします。


関連するトピックとして、Unicode ベースの外部ファイルシステム (VFS KEXT) を作成する場合は、ファイルシステムにテキストエンコーディングヒントを格納するかどうかを指定できます。しかし、テキストエンコーディングヒントを格納しない場合、VOP_GETATTRLIST エントリポイントの ATTR_CMN_SCRIPT 属性の値として kTextEncodingMacUnicode を必ず戻す必要があります。これができないと、Carbon アプリケーションでは日本語のファイル名が正しく表示されるのに、Classic と互換性のある環境で実行しているアプリケーションでは正しく表示されなくなります。


[2003 年 1 月 20 日]