0

HTMLコードをJavaScriptエスケープに変更するために私がやっていることは次のとおりです。

string input = "श्रीगंग..."

var output = Regex.Replace(input, @"&#([0-9]*);", 
               x => String.Format("\\u{0:X4}", int.Parse(x.Groups[1].Value)));
or alternately;

var output = String.Join("", WebUtility.HtmlDecode(input)
                   .Select(x => "\\u" + ((int)x).ToString("X4")));

しかし今、私はこのデータをwcfサービスを介してjson形式で送信しているときに問題があります。それに応じて値を取得しています。しかし、この形式の出力変数だけが間違っています:

\\u0026\\u0023\\u0032\\u0033\\u0033\\u0037\\u003B\\u0026\\u0023\\u0032\\u0033\\u0037\\u0035\\u003B\\u0026\\u0023\\ u0032\\u0033\\u0033\\u0038\\u003B\\u0026\\u0023\\u0032\\u0033\\u0036\\u0034\\u003B\\u0020\\u0026\\u0023\\u0032\\u0033\ \u0032\\u0035\\u003B\\u0026\\u0023\\u0032\\u0033\\u0035

「\\u0026」は必要ありませんが、 「\u0026」のみが応答として必要です。私は次のようなすべてを試しました:

output.Replace("\\","'\'");
output.Replace("\\",@"\");

しかし、ここでは機能しませんでした。

ここに私のWCFサービスメソッドがあります:

 [OperationContract(Name = "GetByCity")]
        [WebInvoke(Method = "GET", UriTemplate = "/GetByCity/DeviceType={DeviceType}&CityId={id}&Limit={limit}", BodyStyle = WebMessageBodyStyle.WrappedRequest,
                    RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        NewsList GetByCity(string DeviceType, string id, string limit);

今、utf-8 形式を定義する場所がわかりません。

4

1 に答える 1

0

Unicode escpaceシーケンス\u....はC#ソースコードで使用され、JSON形式のデータで使用されますが、C#文字列では使用されません。C#文字列はUnicodeを完全にサポートし、すべてのUnicode文字を直接表現します。

送信されるJSONデータで必要な場合、WCFサービスはエスケープシーケンスを自動的に作成します。ただし、文字列にすでにこれらのエスケープシーケンスが含まれている場合、WCFサービスはさらにエスケープを追加するため、JSONデータが解析された後も不要なエスケープシーケンスが保持されます。

したがって、問題を修正するには、HTMLエンティティ(&#....;)を実際のUnicode文字に置き換える必要があります。つまりश、Unicodeコードポイントが2358の文字に置き換える必要があります。

var output = Regex.Replace(input, @"&#([0-9]*);", 
           x => new String((char) int.Parse(x.Groups[1].Value), 1) );
于 2012-09-10T08:03:56.083 に答える