Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将字符串中的所有下标字符更改为C中的普通字符?_C#_String_Character_Subscript - Fatal编程技术网

C# 如何将字符串中的所有下标字符更改为C中的普通字符?

C# 如何将字符串中的所有下标字符更改为C中的普通字符?,c#,string,character,subscript,C#,String,Character,Subscript,关于字符串中的下标字符,我有一个问题。 假设我有以下字符串:O₂. 我希望该字符串的所有下标字符都是正常的,因此该字符串将如下所示: 氧气,而不是氧气₂ 我不知道该怎么做。在.NET中,所有上标和下标字符都有一个通用的分解,如下所述: 但是,如果您想手动执行操作,并且只需要下标中的数字0-9,可以在U+2080-U+2089中找到它们 因此,您可以使用unicode字符的C字符串表示法、\uxxx和int值“0”来帮助您 数字下标的字符数值与普通书写的数字之间的差异为: (int) '\u208

关于字符串中的下标字符,我有一个问题。 假设我有以下字符串:O₂.

我希望该字符串的所有下标字符都是正常的,因此该字符串将如下所示: 氧气,而不是氧气₂


我不知道该怎么做。在.NET中,所有上标和下标字符都有一个通用的分解,如下所述:

但是,如果您想手动执行操作,并且只需要下标中的数字0-9,可以在U+2080-U+2089中找到它们

因此,您可以使用unicode字符的C字符串表示法、\uxxx和int值“0”来帮助您

数字下标的字符数值与普通书写的数字之间的差异为:

(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]符号 您可以使用以下代码:


不能用字符串存储此类格式。你怎么储存这些?它是FlowDocument还是其他东西?可能是从数据库复制的,它存储在字符串属性string Name{get;set;}
    /// <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));