我有以下代码:
string input = "ç";
string normalized = input.Normalize(NormalizationForm.FormD);
char[] chars = normalized.ToCharArray();
我在64位Windows 7上使用Visual Studio 2010 .net4构建此代码。
我在两个上下文中的单元测试项目(平台:Any CPU)中运行它,并检查
chars
的内容:{ 231 }
。 { 231 }
。 { 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/