ReadAsStringAsync返回虚线描述

时间:2018-01-03 12:58:00

标签: c# json dotnet-httpclient

我有一个方法ReadJsonUrl,它获取一个url(字符串地址(例如:https://www.ah.nl/service/rest/delegate?url=%2Fproducten%2Fproduct%2Fwi224732%2Fsmiths-nibb-it-happy-ones-kruis-rond-paprika))到一个JSON文件。

此方法读取JSON并在控制台中输出一些数据。

但问题是产品的描述输出如

  

Smiths Nibb-it hap-py on-es kruis-rond pa-pri-ka

但如果我在浏览器中检查JSON,则会显示

  

Smiths Nibb-it happy ones kruis-rond paprika

这就是我想要它打印的方式。

我认为问题是,请求是使用0px x 0xx分辨率的浏览器完成的,因此它会返回分割的单词以使其可读。如果我使我的浏览器非常小,那么它也会用破折号显示描述。 我在我的代码中添加了一个用户代理,但是没有用。

有没有人知道如何解决这个问题?

我的代码:

    public static async Task<object> ReadJsonUrl(string address)
    {
        using (HttpClient client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36");

            HttpResponseMessage response = await client.GetAsync(address);
            var content = await response.Content.ReadAsStringAsync();
            //JObject obj = JObject.Parse(content);


            var data = Empty.FromJson(content);

            var product = data.Embedded.Lanes[4].Embedded.Items[0].Embedded.Product;

            Console.WriteLine(product.Id);
            Console.WriteLine(product.Description);
            Console.WriteLine(product.PriceLabel.Now);
            Console.WriteLine(product.Availability.Label);
            Console.WriteLine("-------------------------------------");

            System.Threading.Thread.Sleep(5000);

            //the return value is for later use
            return product;

        }

    }

2 个答案:

答案 0 :(得分:8)

如果您将第二个字符串(预期输出)复制并粘贴到十六进制编辑器中,它会告诉您它有if(uri_string()=="/LoginPopup") { echo $msg; } 个字符。这些是soft hyphens

像Internet Explorer或Firefox这样的浏览器只会在必要时显示这些软连字符(在换行符处),但控制台每次都会显示它。

Screen shot of hex Editor

答案 1 :(得分:3)

为了补充Thomas Weller的答案,这很好地解释了这个问题,这里有一个函数可以从string中删除所有的软连字符。它是作为扩展方法编写的,因此您可以像这样轻松地使用它:

Console.WriteLine(product.Description.RemoveSoftHyphens());

扩展方法:

public static class StringExtensions
{
    public static string RemoveSoftHyphens(this string input)
    {
        var output = new StringBuilder(input.Length);
        foreach (char c in input)
        {
            if (c != 0xAD)
            {
                output.Append(c);
            }
        }
        return output.ToString();
    }
}

作为一些附加信息,这里是HTML4对软连字符使用的描述:

  

在HTML中,有两种类型的连字符:纯连字符和软连字符。用户代理应将纯连字符解释为另一个字符。软连字符告诉用户代理可以发生换行的位置。那些解释软连字符的浏览器必须遵守以下语义。如果在软连字符处断行,则必须在第一行的末尾显示连字符。如果在软连字符处没有断行,则用户代理不得显示连字符。对于搜索和排序等操作,应始终忽略软连字符。