现在已经很晚了,而且我的咖啡因IV很低,所以我的思绪很糟糕,我在寻找解决方案时遇到了问题,我认为这是一个简单的编码问题(我几乎没有处理过的经验)。
我有一个使用EF6 Code First的数据库,一切似乎都运行良好,直到我从一个代码块中包含的网站论坛复制一些文本。我检查了标题,它应该用UTF-8编码。
我基本上采用这个文本,将其拆分为一个字符串数组,并检查数据库中是否有与每行中的字符串匹配的记录。一切顺利,直到我遇到一个问题,字符串“Magnеtic”与我的数据库表中的任何内容都不匹配但是当我进入SQLMS并用LIKE'%Magnеtic%'查询表时,我得到了一个结果。
我使用数据库查询中的文本将网站上的文本删除到Notepad ++中,看到它们看起来相同:
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);
}
这个似乎删除了西里尔语编码的重音字符。结果不如预期,但DID有效。 结果:
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;
}
此方法未提供任何更改。
答案 0 :(得分:0)
在这些情况下可以提供帮助的是将字符复制粘贴到Google中。在这种情况下,结果指向the Wikipedia article about the letter Ye in Cyrillic,它看起来与拉丁字母表中的E完全相同,但在Unicode中具有不同的编码。
这意味着你得到的结果是正确的:字符串“Magnеtic”看起来与“Magnetic”完全相同(至少使用普通字体),但它实际上是一个不同的字符串。