比较时相同的字符串不相等
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。
感谢大家的支持!
我有 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。
感谢大家的支持!