【问题标题】:how to convert special characters URL C #如何转换特殊字符 URL C#
【发布时间】:2017-11-13 13:05:25
【问题描述】:

我有以下网址:

https://example.com/trabajo-abogado-civil/A-Coru%25C3%25B1a-guti%25C3%25A9rrez

当我得到 html 代码时,它会返回给我:

Excepción producida: 'System.Net.WebException' en System.dll

我尝试编码为 ascii 和 UTF-8,但它总是返回异常。

private string obtenerPaginaHtml(string urlPaginaHtml)
{           
    try
    {             
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlPaginaHtml);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        if (response.StatusCode == HttpStatusCode.OK)
        {                 
            Stream receiveStream = response.GetResponseStream();
            StreamReader readStream = null;

            if (response.CharacterSet == null)
            {
                readStream = new StreamReader(receiveStream);
            }
            else
            {
                readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
            }

            string data = readStream.ReadToEnd();

            response.Close();
            readStream.Close();

            //MessageBox.Show(data);
            return data;
        }
        else
        {
            return "";
        }            
    }
    catch (WebException e)
    {              
        ThreadController.InvokeIfRequired(log_listBox, () =>
        {
            log_listBox.Items.Add("Error 24 HTML: " + urlPaginaHtml + ": " + e.ToString());
        });
        logTXT("Error 24 en " + urlPaginaHtml + ": " + e.ToString());
        return "";       
    }
}

最终的结果是这样的:

  https://example.com/trabajo-abogado-civil/A-Coruña-gutiérrez

【问题讨论】:

  • 编码后的 url 在浏览器中是否有效?
  • 您是否要对百分比转义的字符串进行转义?
  • System.Web.HttpUtility.HtmlDecode(str);
  • 您在寻找UrlDecode吗?
  • 您的字符串是双重编码的。对它执行两次UrlDecode

标签: c# url character


【解决方案1】:

正如@Crowcoder 所说,您的地址是双重编码的,但即使您正确解码,您也会收到 404 错误消息。

我用以下代码做了一些测试:

using System;
using System.Web;
using System.Net;
using System.IO;
using System.Text;

public class Program
{
    public static void Main()
    {
        var result = String.Empty;

        var urlPaginaHtml = "https://example.com/trabajo-abogado-civil/A-Coru%25C3%25B1a-guti%25C3%25A9rrez";
        urlPaginaHtml = HttpUtility.UrlDecode(HttpUtility.UrlDecode(urlPaginaHtml));

        //urlPaginaHtml = "https://www.google.com.br/"; <-- WORKS

        Console.WriteLine("URL: " +urlPaginaHtml);

        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlPaginaHtml);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            if (response.StatusCode == HttpStatusCode.OK)
            {
                Stream receiveStream = response.GetResponseStream();
                StreamReader readStream = null;

                if (response.CharacterSet == null)
                {
                    readStream = new StreamReader(receiveStream);
                }
                else
                {
                    readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
                }

                //var data = readStream.ReadToEnd();
                result = readStream.ReadToEnd();

                response.Close();
                readStream.Close();

                //MessageBox.Show(data);
                //return data;
            }
            else
            {
                //return ""; 
            }
            Console.WriteLine("DONE!!!");
            Console.WriteLine(result);
        }
        catch (WebException e)
        {
            Console.WriteLine("#ERROR#: " + e.Message);
        }
    }
}

https://dotnetfiddle.net/2Rr8YF

【讨论】:

    猜你喜欢
    • 2012-03-23
    • 2019-09-11
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 2010-10-06
    • 2013-10-03
    • 1970-01-01
    • 2022-07-10
    相关资源
    最近更新 更多