目前我正在尝试修复我的应用程序中的一些格式。我正在尝试下标string
并将其附加到正常的string
- 与在 MS Word 中执行的操作相同。我已经尝试过这个(正如假设的那样here https://en.wikipedia.org/wiki/Superscripts_and_Subscripts and here https://stackoverflow.com/questions/17704169/how-to-write-superscript-in-a-string-and-display-using-messagebox-show):
string temp = "NormalText";
foreach( char t in "SubscriptedText".ToCharArray())
temp += "\x208" + t;
MessageBox.Show(temp);
Output:
NormalTextȈSȈuȈbȈsȈcȈrȈiȈpȈtȈeȈdȈTȈeȈxȈt
但是,正如我后来指出的,字体必须支持 unicode 定义。并且在互联网上似乎没有一种字体支持所有上标格式的字母。
那么,有没有办法格式化我的文本以便为其后半部分添加下标?也许我缺少一个简单的功能?或者这是不可能的,我必须自己对齐我的下标文本?
EDIT还尝试过这个:
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 - '\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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)