c# - 用重音字符反转字符串?

标签 c# .net unicode .net-4.0

所以我看到了 Jon 的双向飞碟 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

有一个 split ......

我能理解为什么会这样:

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

所以我想知道在 C# 中是否有解决此类问题的方法(或者我应该构建自己的机制....)

最佳答案

问题是 Array.Reverse 不知道 char 值的某些序列可能会组合形成单个字符或“字素”,因此应该'被逆转。您必须使用能够理解 Unicode 组合字符序列的东西,例如 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

关于c# - 用重音字符反转字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15029238/

相关文章:

c# - 使用隐式/显式转换而不是构造函数的原因是什么?

c# - .IsBodyHtml=true 导致发送一个空的电子邮件正文,但是 .IsBodyHtml=false 发送正文内容

javascript - 为什么此代码卡在 node.js - Javascript 上的错误?

unicode - 如何在 Windows 上设置 taglib 字符集以使用 unicode?

javascript - 将其他语言的数字更改为英文数字的正则表达式

c# - 仅从文件中的行获取数字

c# - 在 TPL 数据流循环中完成

c# - .NET 浏览器模拟 API

c# - Mysql WHERE LIKE 与 RadCombobox.Text

c# - 自动调整包含 TabControl 的表单