UrlEncode通过控制台应用程序?

时间:2008-08-18 14:48:27

标签: c# .net console

通常我会使用:

HttpContext.Current.Server.UrlEncode("url");

但由于这是一个控制台应用程序,HttpContext.Current始终是null

是否有其他方法可以使用我可以使用的相同方法?

12 个答案:

答案 0 :(得分:76)

试试这个!

Uri.EscapeUriString(url);

或者

Uri.EscapeDataString(data)

无需参考System.Web。

修改:请参阅another以获取更多信息......

答案 1 :(得分:72)

我不是.NET人,但是,你不能使用:

HttpUtility.UrlEncode Method (String)

这里描述:

HttpUtility.UrlEncode Method (String) on MSDN

答案 2 :(得分:13)

Ian Hopkins的代码为我提供了诀窍,无需添加对System.Web的引用。对于那些不使用VB.NET的人来说,这是一个C#的端口:

/// <summary>
/// URL encoding class.  Note: use at your own risk.
/// Written by: Ian Hopkins (http://www.lucidhelix.com)
/// Date: 2008-Dec-23
/// (Ported to C# by t3rse (http://www.t3rse.com))
/// </summary>
public class UrlHelper
{
    public static string Encode(string str) {
        var charClass = String.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()"));
        return Regex.Replace(str, 
            String.Format("[^{0}]", charClass),
            new MatchEvaluator(EncodeEvaluator));
    }

    public static string EncodeEvaluator(Match match)
    {
        return (match.Value == " ")?"+" : String.Format("%{0:X2}", Convert.ToInt32(match.Value[0]));
    }

    public static string DecodeEvaluator(Match match) {
        return Convert.ToChar(int.Parse(match.Value.Substring(1), System.Globalization.NumberStyles.HexNumber)).ToString();
    }

    public static string Decode(string str) 
    {
        return Regex.Replace(str.Replace('+', ' '), "%[0-9a-zA-Z][0-9a-zA-Z]", new MatchEvaluator(DecodeEvaluator));
    }
}

答案 3 :(得分:6)

你想要使用

System.Web.HttpUtility.urlencode("url")

确保将system.web作为项目中的参考之一。我不认为它在控制台应用程序中默认包含为参考。

答案 4 :(得分:4)

尝试在HttpUtility类中使用UrlEncode方法。

  1. http://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx

答案 5 :(得分:3)

我自己遇到了这个问题,而不是将System.Web程序集添加到我的项目中,我编写了一个用于编码/解码URL的类(它很简单,我做了一些测试,但不是很多) 。我在下面列出了源代码。请:如果您重复使用此评论,请将评论保留在顶部,如果发生故障,请不要责怪我,请从代码中学习。

''' <summary>
''' URL encoding class.  Note: use at your own risk.
''' Written by: Ian Hopkins (http://www.lucidhelix.com)
''' Date: 2008-Dec-23
''' </summary>
Public Class UrlHelper
    Public Shared Function Encode(ByVal str As String) As String
        Dim charClass = String.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()"))
        Dim pattern = String.Format("[^{0}]", charClass)
        Dim evaluator As New MatchEvaluator(AddressOf EncodeEvaluator)

        ' replace the encoded characters
        Return Regex.Replace(str, pattern, evaluator)
    End Function

    Private Shared Function EncodeEvaluator(ByVal match As Match) As String
    ' Replace the " "s with "+"s
        If (match.Value = " ") Then
            Return "+"
        End If
        Return String.Format("%{0:X2}", Convert.ToInt32(match.Value.Chars(0)))
    End Function

    Public Shared Function Decode(ByVal str As String) As String
        Dim evaluator As New MatchEvaluator(AddressOf DecodeEvaluator)

        ' Replace the "+"s with " "s
        str = str.Replace("+"c, " "c)

        ' Replace the encoded characters
        Return Regex.Replace(str, "%[0-9a-zA-Z][0-9a-zA-Z]", evaluator)
    End Function

    Private Shared Function DecodeEvaluator(ByVal match As Match) As String
        Return "" + Convert.ToChar(Integer.Parse(match.Value.Substring(1), System.Globalization.NumberStyles.HexNumber))
    End Function
End Class

答案 6 :(得分:3)

使用iv1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Drawable backgrounds[] = new Drawable[2]; Resources res = getResources(); backgrounds[0] = ContextCompat.getDrawable(MainActivity.this, R.drawable.simonsays_yellow); backgrounds[1] = ContextCompat.getDrawable(MainActivity.this, R.drawable.simonsays_yellow_blink); TransitionDrawable crossfader = new TransitionDrawable(backgrounds); ImageView image = (ImageView) findViewById(R.id.iv1); image.setImageDrawable(crossfader); crossfader.startTransition(0); crossfader.reverseTransition(200); } }); 命名空间

中的WebUtility.UrlEncode(string)

答案 7 :(得分:2)

Kibbee提供了真正的答案。是的,HttpUtility.UrlEncode是正确的使用方法,但默认情况下它不适用于控制台应用程序。您必须添加对System.Web的引用。为此,

  1. 在您的解决方案资源管理器中,右键单击引用
  2. 选择“添加参考”
  3. 在“添加引用”对话框中,使用.NET选项卡
  4. 向下滚动到System.Web,选择该项,然后按“确定”
  5. 现在您可以使用UrlEncode方法。你仍然想要添加,

    使用System.Web

    位于控制台应用程序的顶部或在调用方法时使用完整的命名空间

    System.Web.HttpUtility.UrlEncode(someString)

答案 8 :(得分:1)

System.Web中的HttpUtility.UrlEncode(“url”)。

答案 9 :(得分:1)

使用静态HttpUtility.UrlEncode方法。

答案 10 :(得分:0)

最好的方法是添加对System.web..dll的引用

并使用 var EncodedUrl = System.Web.HttpUtility.UrlEncode(&#34; URL_TEXT&#34;);

您可以在System.web.dll

找到文件

答案 11 :(得分:0)

Uri.EscapeUriString不应该用于转义要在URL中传递的字符串,因为它不会像您期望的那样对所有字符进行编码。 '+'是一个很好的例子,没有被转义。然后将其转换为URL中的空格,因为这是在简单URI中的含义。显然,只要您尝试在URL中传递类似base 64编码的字符串,并且在接收端的字符串中出现空格,就会导致大量问题。

您可以使用HttpUtility.UrlEncode并为项目添加所需的引用(如果您正在与Web应用程序通信,那么我认为没有理由不这样做。)

或者在Uri.EscapeUriString上使用Uri.EscapeDataString,如下所述:https://stackoverflow.com/a/34189188/7391