17

次のコードがあります。

string input = "ç";
string normalized = input.Normalize(NormalizationForm.FormD);
char[] chars = normalized.ToCharArray();

このコードは、64 ビット Windows 7 の Visual Studio 2010、.net4 でビルドします。

単体テスト プロジェクト (プラットフォーム: 任意の CPU) で 2 つのコンテキストで実行し、次の内容を確認しますchars

  • Visual Studio 単体テスト: chars には{ 231 }.
  • ReSharper : chars には{ 231 }.
  • NCrunch : chars には が含まれます{ 99, 807 }

msdnのドキュメント では、さまざまな動作を示す情報を見つけることができませんでした。

では、なぜ私は異なる振る舞いをするのでしょうか? 私にとっては、NCrunch の動作は予想どおりですが、他の人にも同じことが予想されます。

編集: .Net 3.5に戻しましたが、まだ同じ問題があります。

4

1 に答える 1

7

String.Normalize (NormalizationForm) のドキュメントには、

バイナリ表現は、normalizationForm パラメータで指定された正規化形式です。

つまり、両方のケースで FormD 正規化を使用することになるため、CurrentCulture などは実際には問題になりません。

変更できる唯一のものは、私が考えることができるのは「ç」文字です。その文字は、Visual Studio ソース コード ファイル用に想定または構成されている文字エンコードに従って解釈されます。要するに、NCrunch は他のものとは異なるソース ファイル エンコーディングを想定していると思います。

NCrunch フォーラムでのクイック検索に基づいて、UTF-8 -> UTF-16 変換についての言及があったので、それを確認します。

于 2012-05-14T11:51:04.890 に答える