Joliet では、ISO9660 の SVD を利用し、文字に UCS-2 を使います。
それに伴う変更点を挙げてゆきます。
1.SVD の設定
1.1 エスケープシーケンスの設定
SVD の Escape Sequences に、UCS-2 を示す 3 レベルあるエスケープシーケンスのいずれかを設定します。
Standard | Level | Decimal | Hex Bytes | ASCII |
UCS-2 | Level 1 | 2/5, 2/15, 4/0 | 0x25, 0x2F, 0x40 | "%\@" |
UCS-2 | Level 2 | 2/5, 2/15, 4/3 | 0x25, 0x2F, 0x43 | "%\C" |
UCS-2 | Level 3 | 2/5, 2/15, 4/5 | 0x25, 0x2F, 0x45 | "%\E" |
残りの29バイトは全て 0x00 です。
とりあえず全部扱えるレベル3に設定しておくのが無難です。
1.2 Volume Flags の設定
UCS-2 は ISO2375 に登録済のため、SVD の Volume Flags は 0 です。
2.文字
2.1 記述法
各文字は UCS-2 の文字をビッグエンディアンで使用します。
2.2 使えない文字
次の文字は使用禁止です。
コード | 文字 | 意味 | 備考 |
0x00,0x00〜0x00,0x90 | | 制御文字 | |
0x00,0x2A | * | アスタリスク | |
0x00,0x2F | / | スラッシュ | |
0x00,0x3A | : | コロン | |
0x00,0x3B | ; | セミコロン | ファイル識別子のファイル名/拡張子とバージョンの区切りに使用 |
0x00,0x3F | ? | 疑問符 | |
0x00,0x5C | \ | バックスラッシュ | |
理由は書かれていませんが、
なんとなく Windows でファイル名として使えない文字は使えませんよ、と言っている気がします。
2.3 使用箇所
SVD 及び SVD から辿るファイルとディレクトリに UCS-2 の文字列を使用します。
並び立てると、
SVD : System Identifier
SVD : Volume Identifier
SVD : Volume Set Identifier
SVD : Publisher Identifier
SVD : Data Preparer Identifier
SVD : Application Identifier
SVD : Copyright File Identifier
SVD : Abstract File Identifier
SVD : Bibliographic File Identifier
ディレクトリレコード : File Identifier
パステーブル : Directory Identifier
拡張属性レコード : System Identifier
つまり a1/d1 文字を使用する箇所の全てです。
3.ファイル識別子
3.1 ファイル識別子の形式
ファイル識別子は次の形を取ります。
ファイル名+0x00,0x2E+拡張子+0x00,0x3B+バージョン
0x00,0x2E = '.'
0x00,0x3B = ';'
単純に各文字をUCS-2の文字に変換しただけです。
ドットは自由に使えるので、ファイル名と拡張子の区切りは無いようなものです。
3.2 ファイル識別子の長さ
ファイル識別子はファイル名と拡張子の合計が64文字、128バイトまで使えます。
4.ディレクトリ識別子
4.1 ディレクトリ識別子の長さ
ディレクトリ識別子は64文字、128バイトまで使えます。
4.2 ルートディレクトリと自身のディレクトリ、親ディレクトリ
これらの特別なディレクトリの識別子には、
ISO9660 の PVD と同様に、
識別子の長さを 1 (バイト)と置き、
ルートディレクトリと自身のディレクトリ は 0x00、
親ディレクトリ は 0x01 と設定します。
5. ディレクトリ階層
ディレクトリ階層の深さに制限はありません。8 を越えてもいいです。
6. フルパス名
各ファイルは、以下の合計が 240 バイトを越えないようにします。
・ファイル識別子の長さ
・すべての関連したディレクトリの識別子の長さ
・関連したディレクトリの数