【问题标题】:WCF JSON Return Service should return Single Escape SequenceWCF JSON 返回服务应返回单个转义序列
【发布时间】:2012-09-10 06:57:31
【问题描述】:

我正在做的将 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 格式。

【问题讨论】:

    标签: c# string wcf utf-8


    【解决方案1】:

    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) );
    

    【讨论】:

    • ::你的答案是完全正确的我得到了我的解决方案但是 ri8 现在我想转换这些 html 代码 "श्रीग ंग..." 到一些像这样的 utf-8 格式字符串: "\u0928\u0908 \u0926\u093f\u0932\u094d‍\u0932\u0940\/\u092e\u0941\u0902\u092c \u0908。”因为我想将它用于移动设备。仅支持 utf-8 格式。
    • WCF 服务会在需要时自动生成它们。但是对于 UTF-8,它们不是必需的,因为 UTF-8 能够直接表示 Unicode 字符。而且由于您的移动设备理解 UTF-8,我认为没有理由使用 Unicode 转义序列。 (如果您有 ASCII 或 ISO-8859-1 编码,您将需要它们。)
    • 但是当我将 json 格式的值发送到设备时,它没有呈现我不知道为什么会这样?我的意思是它没有显示正确的格式它显示的是不同的语言dnt知道什么??
    • 您可能想打开一个新问题,重点关注设备上的问题并提供所有必要的数据(操作系统、编程语言、JSON 库、解析代码、显示代码、示例 JSON 数据等.)。如果您使用某些工具来捕获传输的数据并对其进行分析,它也会有所帮助。如果数据看起来没问题,它可以用于后续问题。如果不是,那么我们可以进一步指出错误可能出在哪里。
    • 是的,我想你 r ri8 好的,我会问一个新问题...顺便说一句,感谢您的快速回复。我接受这个答案,因为这给了我我想要的,尽管这只是我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    相关资源
    最近更新 更多