0

私の c# アプリケーションでは、文字列文字を特殊文字に変換したいと考えています。私の入力文字列は "G\u00f6teborg" で、出力を Göteborg にしたいです。

以下のコードを使用していますが、

 string name = "G\\u00f6teborg";

 StringBuilder sb = new StringBuilder(name);
 sb = sb.Replace(@"\\",@"\");
 string name1 = System.Web.HttpUtility.HtmlDecode(sb.ToString());
 Console.WriteLine(name1);

上記のコードでは、二重スラッシュは同じままで、単一のスラッシュに置き換えられていないため、デコード後に G\u00f6teborg として出力を取得しています。

これに対する解決策を見つけるのを手伝ってください。前もって感謝します。

4

1 に答える 1

1
string name = "G\\u00f6teborg";

バックスラッシュの 1 つを削除するだけです。

string name = "G\u00f6teborg";

ユーザーから入力を取得した場合は、さらに多くのことを行う必要があります。バックスラッシュを置き換えるだけでは十分ではありません。バックスラッシュは、文字が内部で保存される方法ではないためです。バックスラッシュは Unicode コード ポイントを表す\uXXXXエスケープシーケンスです。

ユーザー入力のエスケープ シーケンスを Unicode コード ポイントで置き換えたい場合は、ユーザー入力を適切に解析する必要があります。そのために正規表現を使用できます。

MatchEvaluator replacer = m => ((char) int.Parse(m.Groups[1].Value, NumberStyles.AllowHexSpecifier)).ToString();
string result = Regex.Replace(name, @"\\u([a-fA-F0-9]{4})", replacer);

これは、各エスケープ グループ (\uその後に 4 つの 16 進数が続く) に一致し、16 進数を抽出して解析し、文字に変換します。

于 2012-06-21T11:43:32.007 に答える