3

"\u"文字列を連結し"a string"て「\u0000」を取得するにはどうすればよいですか?

私のコードは 2 つのバックスラッシュを作成します。

string a = @"\u" + "0000";  //ends up being "\\\u0000";
4

5 に答える 5

4

私の理解が正しければ、任意の Unicode 値 (4 桁の 16 進数) から 1 文字の文字列を作成したいと考えていると思います。したがって、文字列 "0000" が与えられた場合、それを文字列 "\u0000"、つまり単一の文字を含む文字列に変換する必要があります。

これがあなたが望むものだと思います:

string  f = "0000";    // Or whatever
int     n = int.Parse(f, NumberStyles.AllowHexSpecifier);
string  s = ((char) n).ToString();

結果の文字列s"\u0000"であり、これを検索に使用できます。

(Thomas Levesque によって提案された修正を含む。)

于 2013-11-14T21:03:30.830 に答える
4

エスケープ シーケンス\uXXXXは言語の構文の一部であり、1 つの Unicode 文字を表します。対照的に、@"\u""0000"は 2 つの異なる文字列で、合計 6 文字です。それらを連結しても、魔法のように単一の Unicode エスケープにはなりません。Unicode コード ポイントを 1 文字の文字列に変換する場合は、次のようにします。

char.ConvertFromUtf32(strUnicodeOfMiddleChar).ToString()

ところで、使用しないでください== true。それは冗長です。

于 2013-11-14T21:02:38.957 に答える
2

以下の行は、2 つのバックスラッシュを作成します。

string a = @"\u" + "0000"; //a ends up being "\\u0000";

いいえ、そうではありません。デバッガーは "\" を "\" と表示します。これは、C# でバックスラッシュを記述する方法であるためです (文字列の前に @ を付けない場合)。その文字列を印刷すると\u0000、 ではなくが表示されます\\u0000

于 2013-11-14T20:59:37.830 に答える
2

いいえ、その文字列には実際に 1 つのバックスラッシュが含まれています。コンソールに出力すると、それが表示されます。

于 2013-11-14T21:00:05.743 に答える
2

あなたのキャラクターを正しく脱出してください!!

両方:

// I am an escaped '\'.   
string a = "\\u" + "0000";

と:

// I am a literal string.
string a = @"\u" + "0000";

うまくいきます。しかし、私はここで手足を出しています。あなたは Unicode 文字と 16 進値をエスケープしようとしていると思います。そのためには、次のものが必要です。

// I am an escaped Unicode Sequence with a Hex value.
char a = '\uxxxx';
于 2013-11-14T21:05:35.690 に答える