所以我看到了乔恩的双向飞碟video http://vimeo.com/7403673并且有一个代码示例:
应该是有问题é
- 逆转后,但我想它在.net2上失败了(恕我直言),无论如何它确实对我有用并且我确实看到了correct反转的字符串。
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# 中是否有解决此类问题的方法(或者我应该构建自己的机制......)
问题是Array.Reverse
不知道某些序列char
值可以组合形成单个字符或“字素”,因此不应颠倒。您必须使用能够理解 Unicode 组合字符序列的东西,例如文本元素枚举器 http://msdn.microsoft.com/en-us/library/system.globalization.textelementenumerator.aspx:
// using System.Globalization;
TextElementEnumerator enumerator =
StringInfo.GetTextElementEnumerator("Les Misאֳrables");
List<string> elements = new List<string>();
while (enumerator.MoveNext())
elements.Add(enumerator.GetTextElement());
elements.Reverse();
string reversed = string.Concat(elements); // selbarאֳsiM seL
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)