C#在字符串中创建下标

时间:2015-08-06 14:14:37

标签: c# string subscript

目前我正在尝试在我的应用程序中修复一些格式。我正在尝试下标string并将其附加到正常的string - 就像在MS word中一样。我已经尝试了这个(假设为herehere):

string temp = "NormalText";
foreach( char t in "SubscriptedText".ToCharArray())
    temp += "\x208" + t;

MessageBox.Show(temp);

输出: NormalTextȈSȈuȈbȈsȈcȈrȈiȈpȈtȈeȈdȈTȈeȈxȈt

但是,正如我后来指出的那样,字体必须支持unicode定义。在互联网上,似乎并不是一种支持所有字母的字体。

那么,有没有办法格式化我的文本以便下标它的下半部分?也许我错过了一个简单的功能?或者这是不可能的,我必须自己调整我的下载文本?

修改 还试过这个:

string temp = "NormalText";
foreach( char t in "SubscriptedText".ToCharArray())
    temp += "\x208" + (int)t;

MessageBox.Show(temp);

但(当然)这根本没有用。我的输出看起来像这样:

NormalTextȈ84Ȉ105Ȉ101Ȉ102Ȉ101Ȉ114Ȉ84Ȉ101Ȉ120Ȉ11

1 个答案:

答案 0 :(得分:1)

首先,有大量符号可用于订阅。有这些符号:

1 - '\u2081'
2-  '\u2082'
3-  '\u2083'
...
9 - '\u2089'
+ - '\u208A'
- - '\u208B'
= - '\u208C'
( - '\u208D'
) - '\u208E'

这就是全部。所以你不能像“SubscriptedText”那样下标字符串。

如果您想要转换为订阅某个数字或允许的符号,您可以尝试以下方式:

void ShowSubText()
    {
        String inputString = "NormalText";
        var nonDigitSymbolsTable = new Dictionary<char, char>();
        nonDigitSymbolsTable.Add('+', 'A');
        nonDigitSymbolsTable.Add('-', 'B');
        nonDigitSymbolsTable.Add('=', 'C');
        nonDigitSymbolsTable.Add('(', 'D');
        nonDigitSymbolsTable.Add(')', 'E');
        StringBuilder temp = new StringBuilder();
        int checkToDigit = 0;
        foreach (char t in "1234567890+-=()".ToCharArray())
        {
            if (int.TryParse(t.ToString(), out checkToDigit))
                temp.Append("\\u208" + t);
            else
                temp.Append("\\u208" + nonDigitSymbolsTable[t]);
        }

        MessageBox.Show(inputString + GetStringFromUnicodeSymbols(temp.ToString()));
    }
    string GetStringFromUnicodeSymbols(string unicodeString)
    {
        var stringBuilder = new StringBuilder();
        foreach (Match match in Regex.Matches(unicodeString, @"\\u(?<Value>[a-zA-Z0-9]{4})"))
        {
            stringBuilder.AppendFormat(@"{0}",
                                       (Char)int.Parse(match.Groups["Value"].Value,System.Globalization.NumberStyles.HexNumber));
        }

        return stringBuilder.ToString();
    }