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

Same string not equal when compare

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

有人知道为什么吗?

对不起我的英语。

感谢阅读!

Ð (208) 是 Eth. Đ (272) is a capital letter of D with stroke.

的大写字母

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

看来,你混合了编码;你可以尝试以正确的方式(快速补丁)编码(猜测:我认为你有Win-1250编码)第一个字符串(x):

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));

我发现了这个错误,它的发生是因为我在声明 SQL 服务器数据类型时有错误。它应该是 nvarchar 但我已将其声明为 varchar。

感谢大家的支持!