「Xamarin.MacからHFS+上のファイル名を取得すると文字コードがおかしい」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
 
1行目: 1行目:
Xamarin.MacからHFS+上のファイル名を取得すると文字コードがおかしい
+
[[Xamarin.Mac]]から[[HFS+]]上のファイル名を取得すると[[文字コード]]がおかしい。
 +
[[Mono]]のコンソールアプリでも同様。
  
macOSが使っているHFS+の文字コードは「NFDというUTF-8によく似た独自仕様」であるために発生するらしい。マジでクソ仕様すぎるだろ…
+
ググると原因はmacOSが使っているHFS+の文字コードは「NFDというUTF-8によく似た独自仕様」であるために発生するらしい。マジでクソ仕様すぎるだろ…
  
なんと.NETでは標準でこれらを判別と変換する機能が用意されている。ググるとrubyなんかでも標準で同様の機能があるとのことなので、このmacOSのクソ仕様はほとんどの言語で考慮されているらしい。
+
なんと.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とは関係ないが

  • macOS標準搭載の「rsync」はNFD非対応。Linuxなんかに送信すると残念なことになる。
  • Homebrew版の「rsync」はNFD対応。

関連項目[編集 | ソースを編集]