xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

Unicodeエスケープ文字を元に戻す

稀に出くわす Unicode 文字のエスケープシーケンス。以下のようなヤツです。

var text = @"\u3053\u3093\u306b\u3061\u306f\u3001\u4e16\u754c\uff01";

その文字をプログラムで戻さなければならない場合があります。今回はそんな方法のメモ。

正規表現の置換を使う

ストレートな方法としては、正規表現で '\u....'と入ってる場所を探し出して置換してしまうというのがあるでしょう。サンプルとしては以下のようになります。毎回書くのがダルいですが、メソッド化してしまえば良いですね。

var result = Regex.Replace
           (
               text,
               @"\\[Uu]([0-9A-Fa-f]{4})",
               x =>
               {
                   var code = ushort.Parse(x.Groups[1].Value, NumberStyles.AllowHexSpecifier);
                   return ((char)code).ToString();
               }
           );
Console.WriteLine(result);

// こんにちは、世界!

もっと簡単な方法

しかしそんなメソッドは作らなくても OK で、最初から用意されています。Regex.Unescape メソッドを利用すれば一発です。非常にシンプル。

var result = Regex.Unescape(text);
Console.WriteLine(result);

// こんにちは、世界!