比较时相同的字符串不相等

时间:2020-05-13 09:44:01

标签: c# string compare equals

我有2个相同的字符串,一个来自SQL Server,另一个保存在app.config中。 当我比较两者时,它们并不相等。因此,我将这些字符串转换为char数组,并且其int值不同。

有人知道为什么吗?

对不起,我的英语。

感谢阅读!

enter image description here

3 个答案:

答案 0 :(得分:3)

Ð(208)是Eth的大写字母。 Đ(272)是D with stroke的大写字母。

两个字母具有相同的视觉效果,但不相同。

答案 1 :(得分:2)

似乎您混合了编码;您可以尝试以正确的方式(快速补丁)对第一个字符串(x)进行编码(猜测:我认为您使用Win-1250编码):

string source = "KÐB";

Console.Write($"Before: {source} :: {string.Join(" ", source.Select(c => (int)c))}"); 

string target = Encoding
  .GetEncoding(1250)
  .GetString(source.Select(c => (byte)c).ToArray());

Console.Write($"After: {target} :: {string.Join(" ", target.Select(c => (int)c))}"); 

结果:

Before: KÐB :: 75 208 66
After: KĐB :: 75 272 66

用法:

using System.Linq;

...

private static string MyEncodingPatch(string value) => value == null 
  ? null 
  : Encoding.GetEncoding(1250).GetString(value.Select(c => (byte)c).ToArray());

...

if (string.Equals(MyEncodingPatch(x), y)) {
  ...
} 

注意:如果x的起源是文件,请指定其编码:

string x = File.ReadAllText(@"C:\MyData.txt", Encoding.GetEncoding(1250));

答案 2 :(得分:0)

我发现了该错误,它的发生是因为在声明SQL Server数据类型时出错。应该是nvarchar,但是我已经声明为varchar。

感谢您的支持!

Solve