17

我有以下代码:

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

我在 64 位 Windows 7 上使用 Visual Studio 2010 .net4 构建此代码。

我在两个上下文中的单元测试项目(平台:任何 CPU)中运行它并检查以下内容chars

  • Visual Studio 单元测试:字符包含{ 231 }.
  • ReSharper:字符包含{ 231 }.
  • NCrunch:字符包含{ 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 回答