2011-12-19 40 views
8

私はそのようなテキストファイルからUnicode文字列を持っています。そして私は本当のキャラクターを表示したい。例えばC言語でunicode文字列をエスケープする方法

StreamReader.ReadToLine()を使用して、テキストファイルからこの文字列を読んだとき

\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b 

、それは\ように望んでいたされていない"\\u8ba1"、など'\\'にエスケープします。

テキストと同じUnicode文字列を表示します。私が望むのは、実際のキャラクターを表示することです。

  1. 結果文字列で"\\u8ba1""\u8ba1"に変更するにはどうすればよいですか?
  2. 文字列を読み取るには別のリーダーを使用する必要がありますか?
+0

[なぜXML文書から読み込むと\ r \ r \ n \ nなどが得られるのですか?](http://stackoverflow.com/questions/5980968/why-when-i-read- from-an-xml-document-do-i-get-rrnn-etc-etc) – dtb

+0

StreamReaderコンストラクタでエンコーディングを提供することができます – Anand

+0

[.NET文字列のユニコード文字へのユニコードエスケープシーケンスの変換方法] http://stackoverflow.com/questions/183907/how-do-convert-unicode-escape-sequences-to-unicode-characters-in-a-net-string) – dtb

答えて

14

あなたは

var input1 = "\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b"; 

// input1 == "计算机•网络•技术类" 

のような文字列を持っている場合は、あなたが何かをアンエスケープする必要はありません。それは文字列自体ではなく、エスケープシーケンスを含む文字列リテラルです。


あなたは

var input2 = @"\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b"; 

のような文字列がある場合は、次の正規表現を使用してそれをアンエスケープすることができます

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

// result == "计算机•网络•技术类" 
+1

一つは、静的を使用することができ'Regex.Unescape'。 – Oded

+2

いいえ、Regex.UnescapeはRegex文字のみです – marsze

+0

本当にありがとうございます。あなたは私の一日を作った –

0

グーグル場合は、この質問は、最初の結果に出てきたが、私は思いましたより単純な方法が必要です...これは私が使用し終わったものです:

using System.Web; 

//... 

string x = HttpUtility.UrlDecode("Ingl\u00e9s"); 
Console.Write(x); // Inglés 
関連する問題