目前我正在尝试在我的应用程序中修复一些格式。我正在尝试下标string
并将其附加到正常的string
- 就像在MS word中一样。我已经尝试了这个(假设为here和here):
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
答案 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();
}