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

Posted

技术标签:

【中文标题】如何在 C# 中将上标或下标转换为普通文本【英文标题】:How to convert super- or subscript to normal text in C# 【发布时间】:2011-02-10 00:55:24 【问题描述】:

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

有什么想法吗?

【问题讨论】:

【参考方案1】:

感谢 Johannes,您让我走上了正轨。我让它工作的代码如下所示:

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);

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

【讨论】:

【参考方案2】:

如果您的字符串在 URL 中,那么我认为它是某种 unicode 字符形式的常规非格式化文本(例如,与 MS Word 文档相反)。在 Unicode 中,you can only have certain characters as superscript or subscript。它们并不多,一个简单的 switch 语句就可以完成这项工作。

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

【讨论】:

请注意,Unicode 中的所有上标和下标都分解为它们的正常字符对应物。因此,实际上,这应该可以在没有硬编码的switch 任意字符选择语句的情况下工作。

以上是关于如何在 C# 中将上标或下标转换为普通文本的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中将上标转换为 Unicode [关闭]

如何在 matplotlib 中制作无衬线上标或下标文本?

在 wpf 中的格式化文本中设置上标和下标

我们如何在flutter Text或RichText中使用上标和下标文本

如何在 C# 中将 HTML 转换为文本?

如何在 C# 中将 HtmlEncode/HtmlDecode 转换为纯文本?