我有2个相同的字符串,一个来自SQL Server,另一个保存在app.config
中。
当我比较两者时,它们并不相等。因此,我将这些字符串转换为char数组,并且其int值不同。
有人知道为什么吗?
对不起,我的英语。
感谢阅读!
答案 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)