我有以下代码:

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

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

我在两个上下文中的单元测试项目(平台:Any CPU)中运行它,并检查chars的内容:
  • Visual Studio单元测试:字符包含{ 231 }
  • ReSharper:字符包含{ 231 }
  • NCrunch:字符包含{ 99, 807 }

  • msdn documentation中,我找不到任何表示不同行为的信息。

    那么,为什么我会有不同的行为?对我来说,NCrunch行为是预期的行为,但对其他行为,我也希望如此。

    编辑:
    我切换回.Net 3.5,仍然遇到相同的问题。

    最佳答案

    String.Normalize(NormalizationForm) documentation中说



    这意味着您将在两种情况下都使用FormD规范化,因此CurrentCulture等实际上并不重要。

    因此,唯一可以改变的就是我想到的“ç”字符。该字符按照为Visual Studio源代码文件假定或配置的字符编码进行解释。简而言之,我认为NCrunch假定源代码编码与其他代码不同。

    基于在NCrunch论坛上的快速搜索,提到了一些UTF-8-> UTF-16转换,因此我会进行检查。

    关于c# - 为什么string.Normalize取决于上下文不一致?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10529636/

    10-11 01:15