【发布时间】:2013-02-08 08:52:02
【问题描述】:
所以我看到了 Jon 的 skeet video 并且有一个代码示例:
é 应该有问题 - 反转后,但我猜它在 .net2 上失败(恕我直言),无论如何它确实对我有用,我确实看到了 正确 反转字符串.
char[] a="Les Misérables".ToCharArray();
Array.Reverse(a);
string n= new string(a);
Console.WriteLine (n); //selbarésiM seL
但我更进一步:
在希伯来语中有“Alef”字符:א
我可以添加标点符号,例如:אֳ(我相信它由 2 个字符组成 - 但显示为一个。)
但现在看看会发生什么:
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# 中是否有解决此类问题的方法(或者我应该建立自己的机制......)
【问题讨论】:
-
TextElementEnumerator 在这里可能有用。
-
所以
א是两个chars? -
你应该添加这个作为答案迈克尔。只是在写 .NET 中没有这样的东西......干得好。
-
@Jodrell,实际上,如果你在 Visual Studio 编辑器中粘贴 Misאֳrables,将光标设置在 אֳ 字符的左侧,然后按右键,你会看到它直接转到 a,而不是河它也有向左移动的问题(在一次按键期间保持阻塞)......
-
关于 Misérables 的事情:对于重音字母(例如法语
é),可能有两种或多种方式将它们编码为 Unicode。作为 one 单个代码点,它包含整个重音字母,或者作为简单的e后跟一个或多个非间距“组合”重音字符。因此,如果您想获得“有问题的”Les Misérables字符串,请以string m1 = "Les Misérables".Normalize(NormalizationForm.FormD);或string m2 = "Les Mise\u0301rables";开头。在反转之前,重音在e上方。不小心倒车后,重音越过了r,也就是ŕ。