「Xamarin.MacからHFS+上のファイル名を取得すると文字コードがおかしい」の版間の差分
ナビゲーションに移動
検索に移動
(→備考) |
|||
1行目: | 1行目: | ||
− | Xamarin. | + | [[Xamarin.Mac]]から[[HFS+]]上のファイル名を取得すると[[文字コード]]がおかしい。 |
+ | [[Mono]]のコンソールアプリでも同様。 | ||
− | + | ググると原因はmacOSが使っているHFS+の文字コードは「NFDというUTF-8によく似た独自仕様」であるために発生するらしい。マジでクソ仕様すぎるだろ… | |
− | なんと. | + | なんと.NETでは標準でこれらを判別と変換する機能が用意されている。ググると[[ruby]]なんかでも標準で同様の機能があるとのことなので、このmacOSのクソ仕様はほとんどの言語で考慮されているらしい。 |
IsNormalizedメソッドで判別 | IsNormalizedメソッドで判別 | ||
18行目: | 19行目: | ||
== 関連項目 == | == 関連項目 == | ||
* [[NFD (Normalization Form Canonical Decompression)]] | * [[NFD (Normalization Form Canonical Decompression)]] | ||
+ | |||
+ | [[category: Xamarin.Mac]] |
2018年3月7日 (水) 02:41時点における最新版
Xamarin.MacからHFS+上のファイル名を取得すると文字コードがおかしい。 Monoのコンソールアプリでも同様。
ググると原因はmacOSが使っているHFS+の文字コードは「NFDというUTF-8によく似た独自仕様」であるために発生するらしい。マジでクソ仕様すぎるだろ…
なんと.NETでは標準でこれらを判別と変換する機能が用意されている。ググるとrubyなんかでも標準で同様の機能があるとのことなので、このmacOSのクソ仕様はほとんどの言語で考慮されているらしい。
IsNormalizedメソッドで判別
var isNfc = Path.GetFileNameWithoutExtension(file).IsNormalized();
Normalizeメソッドで変換
var name = Path.GetFileNameWithoutExtension(file).Normalize();
備考[編集 | ソースを編集]
この記事の.NETとは関係ないが