- 題名: ユニコードエスケープ文字のエンコードについて
- 日時: 2010/08/15 9:05:53
- ID: 27179
- この記事の返信元:
- (なし)
- この記事への返信:
- [27180] Re[1]: ユニコードエスケープ文字のエンコードについて2010/08/15 10:19:04
- ツリーを表示
MatchEvaluator を使ってこんな感じです。 string text = File.ReadAllText(file); // \u は Regex でも Unicode エスケープシーケンスとして扱われるので // 文字列「\u」にマッチさせるには \\u と表現する必要がある。 // さらに C# レベルで \ をエスケープするために \ 一つを \\ と記述する。 // C# レベルのエスケープが面倒なら逐語的リテラル文字列を使うのも手。 text = Regex.Replace(text, "\\\\u(?<code>[0-9a-fA-F]{4})", Replace); static string Replace(Match m) { int code = Convert.ToInt32(m.Groups["code"].Value, 16); // char 型は UTF-16 で同等の数値型と可換。 return ((char)code).ToString(); } なお、C# の Unicode 文字エスケープシーケンスは厳密には UTF-16 で表現する物なので、 基本多言語面(BMP)以外の文字はサロゲートペアとして二つの \uXXXX で表記されます。 上記変換関数もそのように扱っています。
2010/08/15(Sun) 16:56:26 編集(投稿者) Hongliangさん 迅速な回答ありがとうございます。 この方法で、対応することが出来ました。 エレガントなお答え、ありがとうございます! 自分は、正規表現が不得意なので、アドホック的に以下のように対処しようとしていました・・・ private string convertHexUnicode(string intext) { char [] array = intext.ToCharArray(); string outstr = ""; for( int i = 0; i<array.Length; i++ ) { if( array[i] != '\\' ) { outstr += array[i].ToString(); } else { // array[i] == '\\' if( i < array.Length-1 && array[i+1] == 'u' ) { try { string tmpstr = ""; tmpstr += array[i+2]; tmpstr += array[i+3]; tmpstr += array[i+4]; tmpstr += array[i+5]; int tmpi = int.Parse(tmpstr, System.Globalization.NumberStyles.HexNumber); outstr += (char) tmpi; i+=5; } catch { } } } } return outstr; }
分類:[.NET]
いつも参考にさせていただいています。
実は、ファイルに格納している以下の文字列
「今日は、\u702c\u6238へ行く。」
を読み込もうとしています。
この際、unicodeをエスケープ表記している部分が
漢字の「瀬戸」にならなくて困っております。
ネットでも調べましたが、上手くヒットしません。
どなたかお知恵を拝借願えればと存じポストいたしました。