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 回答