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

Jor*_*rda 8 c# superscript slug subscript

我正在写一个slug生成器来制作漂亮的网址.我想将m2转换为m2,但是以通用的方式为所有上标(或下标)执行此操作,而不仅仅是简单的替换语句.

有任何想法吗?

Jor*_*rda 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);
}
Run Code Online (Sandbox Code Playgroud)

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


Sla*_*avo 2

如果您的字符串出现在 URL 中,那么我假设它是某种采用 unicode 字符形式的常规非格式化文本(而不是 MS Word 文档)。在 unicode 中,只能将某些字符作为上标或下标。它们并不多,一个简单的 switch 语句就可以完成这项工作。

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

  • 请注意,Unicode 中的所有上标和下标都会分解为其对应的正常字符。因此,实际上,在没有任意选择字符的硬编码“switch”语句的情况下,这应该可以工作。 (2认同)