如何在C#中将超级或下标转换为普通文本

时间:2010-04-20 08:04:20

标签: c# slug superscript subscript

我正在编写一个用于制作精美网址的slug生成器。我想将m2转换为m2,但是以通用的方式将其转换为所有上标(或下标),而不仅仅是简单的替换语句。

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

感谢约翰内斯,你让我走上正轨。我让它工作的代码如下:

public string ConvertSuperscript(string value)
{
    string stringFormKd = value.Normalize(NormalizationForm.FormKD);
    StringBuilder stringBuilder = new StringBuilder();

    foreach (char character in stringFormKd)
    {
        UnicodeCategory unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(character);
        if (unicodeCategory != UnicodeCategory.NonSpacingMark)
        {
            stringBuilder.Append(character);
        }
    }

    return stringBuilder.ToString().Normalize(NormalizationForm.FormKC);
}

之前我尝试过规范分解,但它需要兼容性分解才能正常工作。

答案 1 :(得分:1)

如果你的字符串是在URL中,那么我认为它是某种常见的非格式化文本,形式为unicode字符(例如,与MS Word doc相反)。在unicode中,you can only have certain characters as superscript or subscript。它们并不多,只需要一个简单的switch语句即可。

如果您尝试将包含所有类型字符的格式化文本转换为上标或下标,则意味着它们不会直接表示为unicode,并且它将在很大程度上取决于文本的格式。如果是,请在问题中提供更多信息。