我正在编写一个用于制作漂亮网址的 slug 生成器。我想将 m² 转换为 m2,但是以一种通用的方式对所有上标(或下标)执行此操作,而不仅仅是一个简单的替换语句。
有任何想法吗?
我正在编写一个用于制作漂亮网址的 slug 生成器。我想将 m² 转换为 m2,但是以一种通用的方式对所有上标(或下标)执行此操作,而不仅仅是一个简单的替换语句。
有任何想法吗?
谢谢约翰内斯,你让我走上了正确的道路。我让它工作的代码如下所示:
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);
}
我之前尝试过规范分解,但它需要兼容性分解才能正常工作。
如果您的字符串在 URL 中,那么我认为它是某种 unicode 字符形式的常规非格式化文本(例如,与 MS Word 文档相反)。在 unicode 中,您只能将某些字符作为上标或下标。它们并不多,一个简单的 switch 语句就可以完成这项工作。
如果您尝试将可能包含各种字符的格式化文本转换为上标或下标,这意味着它们不会直接表示为 unicode,这在很大程度上取决于文本的格式。如果是这样,请在问题中提供更多信息。