メインメニューを開く

差分

ページの作成:「Xamarin.MacからHFS+上のファイル名を取得すると文字コードがおかしい macOSが使っているHFS+の文字コードは「NFDというUTF-8によく...」
Xamarin.MacからHFS+上のファイル名を取得すると文字コードがおかしい

macOSが使っているHFS+の文字コードは「NFDというUTF-8によく似た独自仕様」であるために発生するらしい。マジでクソ仕様すぎるだろ…

なんと.NETでは標準でこれらを判別と変換する機能が用意されている。ググるとrubyなんかでも標準で同様の機能があるとのことなので、このmacOSのクソ仕様はほとんどの言語で考慮されているらしい。

IsNormalizedメソッドで判別
var isNfc = Path.GetFileNameWithoutExtension(file).IsNormalized();

Normalizeメソッドで変換
var name = Path.GetFileNameWithoutExtension(file).Normalize();

== 備考 ==
この記事の.NETとは関係ないが
* macOS標準搭載の「rsync」はNFD非対応。
* Homebrew版の「rsync」はNFD対応。

== 関連項目 ==
* [[NFD (Normalization Form Canonical Decompression)]]
匿名利用者