【问题标题】:C# String compare not workingC#字符串比较不起作用
【发布时间】:2013-04-11 15:21:34
【问题描述】:

我在比较 Request.queryString 接收的字符串和文件 .resx 中的一行时遇到了一些问题。

代码将Request.queryString 接收到一个名为q 的变量,然后它转到一个函数来比较一行中是否包含q 值:

        while ((line = filehtml.ReadLine()) != null)
        {
            if (line.ToLower().Contains(q.ToLower().ToString()))
                HttpContext.Current.Response.Write("<b>Content found!</b>");
            else
                HttpContext.Current.Response.Write("<b>Content not found!</b>");
        }

由于它是在静态文件中搜索,因此必须考虑特殊字符并搜索:例如,Iberê 不会返回 true,因为 .Contains.IndexOf.LastindexOf 正在比较:iber&amp;ecirc; ,来自qiber&amp;#234; 来自线路。

考虑到我已经尝试使用 ResXResourceReader(Visual Studio 找不到)、ResourceReader 和 ResourceManager(这些我无法通过要读取的路径设置静态文件)。


编辑:

问题解决了。有一个SpecialChars的实例,用EntitiesEncode方法覆盖q

【问题讨论】:

  • 所以你说的是字符串“iberê”不等于“iberê”?这是正确的 - 我很惊讶你感到惊讶......
  • 我很确定您需要将数据转换为 byte[] 并进行比较。

标签: c# asp.net visual-studio encoding string-comparison


【解决方案1】:

问题是ê 字符在两个字符串中都被转义了。所以如果你做了这样的事情,它就行不通了:

        string line = "sample iber&ecirc; text";
        string q = "iber&#234;";
        if (line.Contains(q)) {
            // do something
        }

您需要取消转义字符串。在System.Web 程序集中使用HttpUtility。这将起作用:

        line = System.Web.HttpUtility.HtmlDecode(line);
        q = System.Web.HttpUtility.HtmlDecode(q);
        if (line.Contains(q)) {
            // do something
        }

正如下面@r3bel 所建议的,如果您使用.net 4 或更高版本,您也可以使用System.Net.WebUtility.HtmlDecode,因此您不需要额外的程序集引用。

【讨论】:

  • 写在这里:stackoverflow.com/questions/122641/…,您可以在 .NET 4.0+ 中使用 WebUtility.HtmlDecode :)
  • @r3bel 这样做的好处是您不需要对 System.Web.dll 的程序集引用。
  • @caerolus - 谢谢你的回答。我试过解码,但HttpUtility.HtmlDecode(q) = iber&amp;ecirc;HttpUtility.HtmlDecode(line) = iber&amp;#234;
  • @FabianoAraujo 那么您的 qline 必须有所不同。如果你试试这个System.Net.WebUtility.HtmlDecode("iber&amp;ecirc;");,你会得到iberê,正如预期的那样。如果您执行Console.WriteLine(q),它会在控制台中显示什么?
  • @caerolus - 我不确定Console.WriteLine(q) 应该在哪里显示结果,但如果我尝试Response.Write(q) 它会显示iber&amp;ecirc;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 2014-04-03
  • 2012-01-22
  • 2017-12-07
  • 1970-01-01
相关资源
最近更新 更多