反转字符串口音字符?口音、字符串、字符

由网友(愚妄 -%)分享简介:所以我看到乔恩双向飞碟视频并有一个code样品:的So I saw Jon's skeet video and there was a code sample :目前应该是一个问题的电子 - 倒车后视,但我想它在失败.NET2(恕我直言),反正它的工作对我来说,我确实看到了中的正确的逆转字符串。There s...

所以我看到乔恩双向飞碟视频并有一个code样品:的

So I saw Jon's skeet video and there was a code sample :

目前应该是一个问题的电子 - 倒车后视,但我想它在失败.NET2(恕我直言),反正它的工作对我来说,我确实看到了中的正确的逆转字符串。

There should have been a problem with the é - after reversing but I guess it fails on .net2 (IMHO), anyway it did work for me and I did see the correct reversed string.

char[] a="Les Misérables".ToCharArray();
Array.Reverse(a);
string n= new string(a);
Console.WriteLine (n); //selbarésiM seL

但我把它进一步的:

But I took it further:

在希伯来文就有了阿勒夫字符:א

In Hebrew there is the "Alef" char : א

和我能加标点符号,如:אֳ(我相信包括2个字符 - 但显示为一个)

and I can add punctuation like : אֳ ( which I believe consists of 2 chars - yet displayed as one.)

但现在看会发生什么:

char[] a="Les Misאֳrables".ToCharArray();
Array.Reverse(a);
string n= new string(a);
Console.WriteLine (n); //selbarֳאsiM seL

有一个分裂...

There was a split...

我可以理解为什么它正在发生:

I can understand why it is happening :

Console.WriteLine ("אֳ".Length); //2

所以我在想,如果有一个变通方法对于这种问题在C#(或者我应该建立自己的机制......)

So I was wondering if there's a workaround for this kind of issue in C# ( or should I build my own mechanism....)

推荐答案

问题是, Array.Reverse 不知道炭值可以结合以形成一个单一的字符,或者字形,并且因此不应该被逆转。你必须使用的东西,了解统一code组合字符序列,如TextElementEnumerator:

The problem is that Array.Reverse isn't aware that certain sequences of char values may combine to form a single character, or "grapheme", and thus shouldn't be reversed. You have to use something that understands Unicode combining character sequences, like TextElementEnumerator:

// 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
阅读全文

相关推荐

最新文章