Java
java.util.regex.Patternでは、
Unicodeのブロックを\p{InGreek}
のように定義できます。
有効なブロックは以下のように記載されています。
Patternのサポートするブロック名は、 UnicodeBlock.forNameによって受け入れられ、定義される有効なブロック名です。
java.lang.Character.UnicodeBlock#forNameでは以下のように書かれています。
ファイルBlocks-.txtは、特定のバージョンの標準のブロックを定義します。
このファイルは見つかりませんでしたが、 おそらく以下のパスにあるものが正しいです。
https://www.unicode.org/Public/<バージョン>/ucd/Blocks.txt
Java SE 8は6.2.0に対応しているので、以下のパスになります。
https://www.unicode.org/Public/6.2.0/ucd/Blocks.txt
日本語でよく使われるのはこのあたりでしょうか。
- Hiragana
- Katakana
- CJK Unified Ideographs
一方で、java.lang.Character.UnicodeBlock#forNameでは、 以下のように書かれています。
- 大文字と小文字は区別されない
- 全ての空白を削除した正規ブロック名を受け入れる
なので、‘CJK Unified Ideographs’の場合は、 ‘CjkUnifiedIdeographs’と渡しても問題なさそうです。
HTML
- ‘&#’ + 数値 + ‘;’、または’&#x&’ + 16進数値 + ‘;‘で指定可能。
NFC/NFD問題(Apple)
AppleのOSでは、濁点を含むもの、 例えば「プ」を「フ」と「゜」に分解して格納していたため、 他のOSと互換性がなくなっていました。
- NFC: 「プ」のまま(他のOSと同じ)
- NFD: 「フ」と「゜」(互換性の問題あり)
チェック方法
ファイル名に関しては以下のようにすることで、 ホームディレクトリ以下を一括でチェックできます。 (NFDになっているものを表示)
convmv -f utf8 --nfd -t utf8 --nfc -r ~
簡単なものなら、ls | od -hc
などで、目視確認もできます。
UTF-8のひらがなカタカナは以下のサイトで調べられます。
自分の環境で確認してみたところ、 「touchでAPFSで新規に作成したファイル」については問題なさそうでした。
Appleのサイトには以下のようにFAQがあります。
APFS preserves the normalization of the filename and uses hashes of the normalized form of the filename to provide normalization insensitivity, whereas HFS+ stores the normalized form of the filename on disk to provide normalization insensitivity.
APFSはファイル名は正規化を保持するが、 ファイル名を正規化したものをハッシュとして使用すると書かれているようです。
ハッシュはおそらく検索用のため、検索するときは 正規化されているかどうかに関わらずヒットするようです。