所以我看了Jon的打靶视频,里面有一段代码:
在反转后应该会有一个é
的问题-但我猜它在.net2上会失败(个人意见),不管怎样,它对我起作用,并且我确实看到了正确的反转字符串。
char[] a="Les Misérables".ToCharArray();
Array.Reverse(a);
string n= new string(a);
Console.WriteLine (n); //selbarésiM seL
但我更进一步了:
在希伯来语中有一个“阿列夫”字符:א
我可以添加标点符号,比如:אֳ
(我相信它由两个字符组成,但显示为一个)。
但现在看看会发生什么:
char[] a="Les Misאֳrables".ToCharArray();
Array.Reverse(a);
string n= new string(a);
Console.WriteLine (n); //selbarֳאsiM seL
有一个分裂...
我能理解为什么会发生:
Console.WriteLine ("אֳ".Length); //2
所以我想知道在C#中是否有解决这种问题的方法(或者我应该构建自己的机制...)
א
是两个chars
吗? - Jodrellé
这样带重音符号的字母,在Unicode中可能有两种或更多的编码方式。一种是将整个带重音符号的字母作为 一个 单一代码点来表示,另一种则是将简单的e
后面跟随一个或多个非间隔的“组合”重音字符来表示。因此,如果您想得到一个“有问题”的Les Misérables
字符串,请使用以下任一方式之一开始:string m1 = "Les Misérables".Normalize(NormalizationForm.FormD);
或者string m2 = "Les Mise\u0301rables";
。在翻转之前,重音标记位于e
上方。在粗心地翻转后,重音标记移到了r
上,即ŕ
。 - Jeppe Stig Nielsen