Почему нет string.Normalize в зависимости от контекста?
У меня есть следующий код:
string input = "ç";
string normalized = input.Normalize(NormalizationForm.FormD);
char[] chars = normalized.ToCharArray();
Я создаю этот код с Visual studio 2010,.net4, на 64-битных окнах 7.
Я запускаю его в проекте единичных тестов (платформа: любой процессор) в двух контекстах и проверяю содержимое chars
:
- Модульные тесты Visual Studio: символы содержат
{ 231 }
.
- ReSharper: символы содержат
{ 231 }
.
- NCrunch: chars содержит
{ 99, 807 }
.
В msdn documentation я не мог найти никакой информации, представляющей разные типы поведения.
Итак, почему у меня другое поведение? Для меня поведение NCrunch является ожидаемым, но я ожидал бы то же самое для других.
Edit:
Я переключился на .Net 3.5 и по-прежнему имею ту же проблему.
Ответы
Ответ 1
В документации String.Normalize(NormalizationForm) говорится, что
двоичное представление находится в форме нормализации, заданной normalizationForm.
что означает, что вы должны использовать нормализацию FormD в обоих случаях, поэтому CurrentCulture и тому подобное не должны иметь значения.
Единственное, что может измениться, то, о чем я могу думать, это символ "ç". Этот символ интерпретируется как кодировка символов, которая либо предполагается, либо сконфигурирована для файлов исходного кода Visual Studio. Короче говоря, я думаю, что NCrunch предполагает различную кодировку исходного файла, чем другие.
Основываясь на быстром поиске на форуме NCrunch, было упоминание о некотором преобразовании UTF-8 → UTF-16, поэтому я бы это проверить.