7

我正在尝试比较两个字符串,但其中一个字符串末尾包含一个空格。我使用了 Trim() 并进行了比较但没有工作,因为那个空白被转换为 %20 并且我认为 Trim 不会删除它。它类似于"abc"and "abc%20",在这种情况下我能做些什么来比较字符串而忽略大小写?

4

7 回答 7

6

%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
于 2013-06-05T07:56:42.337 回答
5

使用 HttpUtility.UrlDecode 解码字符串:

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

对于 WinForms 或控制台(或任何非 ASP.NET)项目,您必须在System.Web项目中添加对程序集的引用。

于 2013-06-05T07:54:19.000 回答
1

"%20"' '(空格)字符的url 编码版本。您是否在比较编码的 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可能是字符串之间不区分大小写比较的最快方法。

于 2013-06-05T07:56:00.427 回答
1

就像是:

if (System.Uri.UnescapeDataString("abc%20").ToLower() == myString.ToLower()) {}
于 2013-06-05T08:01:48.883 回答
0

你试过这个吗?

string before = "abc%20";
string after = before.Replace("%20", "").ToLower();
于 2013-06-05T07:53:25.190 回答
0

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

var str1 = "abc";
var str2 = "Abc%20";
str1.Replace("%20", "").ToLower() == str2.Replace("%20", "").ToLower();
// will be true
于 2013-06-05T07:53:30.123 回答
0

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

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

在这里,您可以在 Microsoft 网站上阅读有关字符编码的更多信息。如果你会做正确的编码,你可以避免剩下的工作

这就是你问的 -

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

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

结果 bool 知道它们是相等还是不相等

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

希望能帮助到你

于 2013-06-05T08:31:26.727 回答