我如何比较这两个值?有什么想法吗?
请看这张图片告诉我该怎么办?
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();
答案 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