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

C# 在c中进行字符串比较时如何处理%20#,c#,string,C#,String,我试图比较两个字符串,但其中一个字符串的末尾包含空格。我使用了Trim()并进行了比较,但不起作用,因为空白将转换为%20,而我认为Trim不会删除它。它类似于“abc”和“abc%20”,在这种情况下,我可以做什么来比较忽略大小写的字符串呢?您尝试过这个吗 string before = "abc%20"; string after = before.Replace("%20", "").ToLower(); 您可以使用String.Replace,因为您提到了不区分大小写String.To

我试图比较两个字符串,但其中一个字符串的末尾包含空格。我使用了Trim()并进行了比较,但不起作用,因为空白将转换为%20,而我认为Trim不会删除它。它类似于
“abc”
“abc%20”
,在这种情况下,我可以做什么来比较忽略大小写的字符串呢?

您尝试过这个吗

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

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

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

使用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
程序集的引用。

%20”
'
(空格)字符的url编码版本。您正在比较编码的URL参数吗?如果是,您可以使用:

string str = "abc%20";
string decoded = HttpUtility.UrlDecode(str); // decoded becomes "abc "
如果您需要修剪任何空白,您应该对解码的字符串执行此操作。
Trim
方法无法理解或识别编码的空白字符

decoded = decoded.Trim();
现在,您可以使用以下方法与解码的
变量进行比较:

decoded.Equals(otherValue, StringComparison.OrdinalIgnoreCase);

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

%20
是空格的url编码版本

您不能使用
Trim()
直接将其剥离,但可以使用将
%20
解码回空格,然后完全按照其他方式进行修剪/比较

使用System.Web;
//...
var test1=“您好%20”;
var test2=“hello”;
Console.WriteLine(HttpUtility.UrlDecode(test1.Trim())。
等于(HttpUtility.UrlDecode(test2.Trim(),
StringComparison.InvariantCultureInogoreCase);
>真的
类似于:

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

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

System.Web.HttpUtility.UrlEncode("ãName Marcos", System.Text.Encoding.GetEncoding("iso-8859-1"))
您可以阅读更多有关字符编码的信息。 如果您将进行适当的编码,就可以避免其余的工作

这是你问的-

第二种情况-如果必须根据需要比较两个字符串,则需要解码HttpUtility.UrlDecode(test)

结果布尔知道它们是相等的还是不相等的

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

希望它能帮助您在比较之前使用Server.UrlDecode(“abc%20”)或编写自己的比较器来处理这个问题。
String.Equals
不是必需的,您也可以使用
==
@ggPeti我知道,使用
.Equals()
对我来说更易读,所以在没有
null
的风险时,我会使用它。每个人都有自己的选择!我只是觉得OP会发现这些信息很有用。你说得对,我没想到。谢谢你的更正。
Console.WriteLine("Result is", result ? "equal." : "not equal.");