如何在 C# 中将字符串中的所有下标字符更改为普通字符
本文关键字:字符 下标 字符串 | 更新日期: 2023-09-27 18:31:35
我对字符串中的下标字符有问题。假设我有以下字符串:O₂。
我希望该字符串的所有订阅字符都是正常的,因此字符串将如下所示:B2C(而不是 O₂)
我不确定如何做到这一点 i C#。
.NET 中的所有上标和下标字符都有一个常规的"分解",如下所述:如何在 C# 中将上标或下标转换为普通文本。
但是,如果您想手动执行操作,并且如果您只想要下标中的数字 0-9,则可以在 U+2080 - U+2089 (http://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts) 中找到它们。
因此,您可以使用 unicode 字符的 C# 字符串表示形式、'uXXXX
和 '0'
的 int 值来帮助您。
下标和普通书写数字的字符"数字"值的差异为:
(int) ''u2080' - (int) '0'
放在一起,以下内容可能会更好地解释它:
使用 System.IO;使用系统;
class Program
{
static void Main()
{
var subscriptValue = (int) ''u2080';
var normalValue = (int) '0';
var diff = subscriptValue - normalValue;
Console.WriteLine("subscript value: {0}, normal value: {1}, difference: {2} ",
subscriptValue, normalValue, diff);
for (var i = normalValue; i <= (normalValue + 9); i++) {
char normal = (char) i;
char subscript = (char) (i + diff);
Console.WriteLine("Normal: {0}, subscript: {1}", normal, subscript);
}
}
}
如果要转换标准 unicode 下标块 ([0x2080..0x209F] 符号)您可以使用此代码:
http://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts
/// <summary>
/// From subscript (standard subscript block [0x2080..0x209F] only) to normal
/// </summary>
public static String FromSubscript(String value) {
if (String.IsNullOrEmpty(value))
return value;
Char[] Symbols = new Char[] {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '-', '=', '(', ')', '?', // <- '?' unknown/not standard symbols
'a', 'e', 'o', 'x', ''u0259', 'h', 'k', 'l', 'm', 'n', 'p', 's', 't', '?', '?', '?' }; // <- u0259 - small latin shwa
StringBuilder result = new StringBuilder(value.Length);
foreach (Char ch in value) {
int v = (int) ch;
if ((v >= 0x2080) && (v <= 0x209F))
result.Append(Symbols[v - 0x2080]);
else
result.Append(ch);
}
return result.ToString();
}
...
String test = "O₂";
Debug.Assert(String.Equals(FromSubscript(test), "O2", StringComparison.Ordinal));