1

文字列の下付き文字に関して問題があります。次の文字列があるとしましょう: O₂.

その文字列のすべてのサブスクライブ文字を通常の文字列にして、文字列が O2 のようになるようにします (O₂ ではありません)。

私はC#でそれを行う方法がわかりません。

4

2 に答える 2

0

標準の 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));
于 2013-09-16T06:50:30.493 に答える
0

ここで説明されているように、.NET にはすべての上付き文字と下付き文字の一般的な「分解」があります: How to convert super-or subscript to normal text in C# .

ただし、手動で処理したい場合、および下付き文字に 0 ~ 9 の数字のみが必要な場合は、U+2080 ~ U+2089 ( http://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts )で見つけることができます。 .

そのため、Unicode 文字の C# 文字列表現\uXXXX、および 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);
       }

    }
}
于 2013-09-16T06:38:51.537 に答える