如何在c#中进行字符串比较时处理%20

时间:2013-06-05 07:48:56

标签: c# string

我正在尝试比较两个字符串,但其中一个字符串在末尾包含一个空格。我使用了Trim()并进行了比较,但是没有工作,因为白色空间正在转换为%20,而我的东西Trim并没有删除它。它类似于"abc""abc%20",在这种情况下我可以做些什么来比较字符串而忽略这种情况呢?

7 个答案:

答案 0 :(得分:5)

%20是url编码的空间版本。

您无法使用Trim()直接删除它,但您可以使用HttpUtility.UrlDecode()%20解码回某个空格,然后完全修剪/进行比较否则;

using System.Web;

//...

var test1 = "HELLO%20";
var test2 = "hello";

Console.WriteLine(HttpUtility.UrlDecode(test1).Trim().
           Equals(HttpUtility.UrlDecode(test2).Trim(),              
           StringComparison.InvariantCultureIgnoreCase));

> true

答案 1 :(得分:4)

使用HttpUtility.UrlDecode解码字符串:

string s1 = "abc ";
string s2 = "abc%20";
if (System.Web.HttpUtility.UrlDecode(s1).Equals(System.Web.HttpUtility.UrlDecode(s2)))
{
    //equals...
}

如果是WinForms或Console(或任何非ASP.NET)项目,则必须在项目中添加对System.Web程序集的引用。

答案 2 :(得分:1)

"%20"' '(空格)字符的网址编码版本。您是否在比较编码的URL参数?如果是这样,您可以使用:

string str = "abc%20";
string decoded = HttpUtility.UrlDecode(str); // decoded becomes "abc "

如果需要修剪任何空格,则应对已解码的字符串执行此操作。 Trim方法无法理解或识别已编码的空白字符。

decoded = decoded.Trim();

现在,您可以使用以下内容与decoded变量进行比较:

decoded.Equals(otherValue, StringComparison.OrdinalIgnoreCase);

StringComparison.OrdinalIgnoreCase可能是字符串之间不区分大小写比较的最快方法。

答案 3 :(得分:1)

类似的东西:

if (System.Uri.UnescapeDataString("abc%20").ToLower() == myString.ToLower()) {}

答案 4 :(得分:0)

你试过这个吗?

string before = "abc%20";
string after = before.Replace("%20", "").ToLower();

答案 5 :(得分:0)

您可以使用String.Replace,因为您提到了不区分大小写String.ToLower,如下所示:

var str1 = "abc";
var str2 = "Abc%20";
str1.Replace("%20", "").ToLower() == str2.Replace("%20", "").ToLower();
// will be true

答案 6 :(得分:0)

似乎根本问题在于您使用编码Url时。如果你将使用字符编码,那么你永远不会得到%20。 HttpUtility.UrlEncode utf-8使用的默认编码。这是用法

System.Web.HttpUtility.UrlEncode("ãName Marcos", System.Text.Encoding.GetEncoding("iso-8859-1"))

Here, on Microsoft website您可以阅读有关字符编码的更多信息。 如果你能做适当的编码,你可以避免其余的工作

这就是你问的问题 -

第二种情况 - 如果你需要根据需要比较两个字符串,你需要解码HttpUtility.UrlDecode(测试)

bool result = HttpUtility.UrlDecode(stringOne).Equals(HttpUtility.UrlDecode(stringOne));

结果bool知道他们是平等还是不平等

Console.WriteLine("Result is", result ? "equal." : "not equal.");

希望有所帮助