我如何比较两个字符串与相同的presentaion但不同的byte []? C#

时间:2017-04-12 11:26:12

标签: c#

我如何比较这两个值?有什么想法吗?

请看这张图片告诉我该怎么办?

enter image description here

1-代码

2-变量值,它接缝相同!

3-显示它的输出不正常!而且这些值不一样!

4-我明白这两个值之间的唯一区别在于它们的2个字节。 (我使用this link来获取UTF8属性的字符串byte [])

解决方案:

我写了这个扩展方法来解决问题:

public static class FarsiExtension
{
    public static string FixYEH(this String instance)
    {
        return instance.Replace('ي', 'ی');
    }
}

你可以这样使用它:

string fixedValue = stateKhedmat.ToString().FixYEH();

3 个答案:

答案 0 :(得分:0)

它们看起来像是相同的字符并不意味着它是相同的字符,正如您在字节代码中看到的那样。

我认为使这些字符串匹配的唯一方法是始终将通过将1替换为1来获得的字符串规范化。

答案 1 :(得分:0)

我认为你有填充问题,将字符串转换为字节并删除填充并转换回字符串。这应该可以解决这个问题。

答案 2 :(得分:0)

似乎可以使用CompareOptions.IgnoreNonSpace,但我不确定如何测试误报:

string s1 = "پایان خدمت", s2 = "پايان خدمت"; char c1 = 'ی', c2 = 'ي';
var ci = System.Globalization.CultureInfo.InvariantCulture.CompareInfo;

Debug.Print(ci.Compare(s1, s2, CompareOptions.IgnoreNonSpace) + ""); // 0
Debug.Print(ci.Compare(s1, s2                               ) + ""); // 1

Debug.Print(ci.IndexOf(s1, c1, CompareOptions.IgnoreNonSpace) + ""); // 2
Debug.Print(ci.IndexOf(s1, c1                               ) + ""); // 2

Debug.Print(ci.IndexOf(s1, c2, CompareOptions.IgnoreNonSpace) + ""); // 2
Debug.Print(ci.IndexOf(s1, c2                               ) + ""); // -1