这是晚了,我的咖啡因IV运行低,所以我的头脑糊涂,我有问题寻找解决方案,我认为是一个简单的编码问题(我几乎没有经验处理用)。不正确的编码导致数据库查询问题
我有一个使用EF6代码优先的数据库,一切似乎工作良好,直到我从一个代码块中包含的网站论坛复制一些文本。我检查了头文件,它被认为是用UTF-8编码的。
我基本上把这段文字分割成一个字符串数组,并检查数据库中是否有匹配每行中字符串的记录。一切都很顺利,直到我遇到一个字符串“Magnеtic”与我的数据库表中的任何内容不匹配的问题时,当我进入SQLMS并使用LIKE'%Magnеtic%'查询表时,我得到了一个结果。
我放弃从网站上的文字到记事本++与数据库查询的文字,看到他们看起来等于:
Magnеtic
Magnеtic
然后,我改变了编码为ANSI,它表明:
Magnetic <--From DB
Magnеtic <--From website
一个小小的灯泡在我脑海中流逝,但我试图解决这个问题失败了。
我一直利用各种方法尝试,但我认为这是我的脑子炸了错误的工具攻击问题:
string.compare(a, b) == 0
string.equals(a, b)
string.ToUpperInvariant()
而且我不记得大概几个人。
所以,现在你知道我的问题是什么,我觉得这是一个很简单的问题来解决,但正如我所说,我炸了,现在需要一些社区帮助。
我不是一个专业的编码员,更多的是业余爱好者,所以我可能不会使用最佳实践或高级技术来做一些事情。
编辑: 今天我做了一些更多的搜索,发现有几个方法不起作用。
private string RemoveAccent(string txt)
{
byte[] bytes = Encoding.GetEncoding("Cyrillic").GetBytes(txt);
return Encoding.ASCII.GetString(bytes);
}
这一个似乎删除重音字符的西里尔文编码。结果并不如预期,但它有一个影响。 结果:
Magn?tic <- Computer interpretation
Magnetic <- Visual representation
我也试过:
private string RemoveAccent2(string txt)
{
char[] toReplace = "àèìòùÀÈÌÒÙ äëïöüÄËÏÖÜ âêîôûÂÊÎÔÛ áéíóúÁÉÍÓÚðÐýÝ ãñõÃÑÕšŠžŽçÇåÅøØ".ToCharArray();
char[] replaceChars = "aeiouAEIOU aeiouAEIOU aeiouAEIOU aeiouAEIOUdDyY anoANOsSzZcCaAoO".ToCharArray();
for (int i = 0; i < toReplace.Count(); i++)
{
txt = txt.Replace(toReplace[i], replaceChars[i]);
}
return txt;
}
这种方法没有提供任何的变化。
感谢您的回复,@svick。所以,如果我得到两个视觉上相同的字符串,但计算机将它们解释为不同,我如何规范化所有进来的文本,以便比较我可以看到的内容而不是计算机解释的内容? – Josh
@Josh我不认为有这样的事情,尤其是因为不同的字体可能会有不同的表现。 – svick