2012-07-28 32 views
17

私は以下のString文字を持っています。私は上記のシーケンスを印刷するときユニコード文字列

string s = "\\u0625\\u0647\\u0644"; 

、私が取得:

\u0625\u0647\u062 

は私の代わりにこの\ uXXXXという表現の実際の印刷可能なUnicode文字を取得できますか?


私は答えを発見した:

s = System.Text.RegularExpressions.Regex.Unescape(s); 
+3

:あなたは、ここですべてを見つけることができますか?その場合は、バックスラッシュの1つを削除してください。 "\ u1234 \ u5678"そうでない場合は、コールバックメソッドを使って正規表現を使って数字を解析し、それを文字に変換して文字列として返してください。 – Onkelborg

+0

"文字列を制御できません"という意味はどうですか?あなたのシナリオは何ですか? –

+1

いいえ私は答えを見つけました:System.Text.RegularExpressions.Regex.Unescape() –

答えて

1

Regexをお試しください:

String inputString = "\\u0625\\u0647\\u0644"; 

var stringBuilder = new StringBuilder(); 
foreach (Match match in Regex.Matches(inputString, @"\u([\dA-Fa-f]{4})")) 
{ 
    stringBuilder.AppendFormat(@"{0}", 
           (Char)Convert.ToInt32(match.Groups[1].Value)); 
} 

var result = stringBuilder.ToString(); 
3

あなたが本当に文字列をコントロールしていない場合に、あなたは自分の持つものエスケープシーケンスを交換する必要があります値:

Regex.Replace(s, @"\u([0-9A-Fa-f]{4})", m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString()); 

とそこには\\エスケープがないことを願っています。

+1

作品正解はSystem.Text.RegularExpressions.Regex.Unescape()だけではUnicodeエスケープそれらを交換するよりも多くない –

+0

... – Joey

+1

である私はMatchEvaluatorがあるべきと考えている: 'メートル=>((文字)に変換します.ToInt32(m.Groups [1] .Value、16)).ToString() '。 – Otiel

関連する問題