Gga*_*Gga 16 c# latin character-encoding special-characters mojibake
我一直在考虑从似乎有它的编码方式有点糊涂随着时间的推移和包含的混合MySQL数据库的出口HTML char codes,如& uuml;代表相同的字母和问题较多的字符,如ü和Ã.我的任务是将一些一致性带回文件并将所有内容都放入正确的拉丁字符中,例如ú和ó.
我正在处理的字符串类型的一个例子是
DesinfektionslÃÂsungstücherfürFlächen
哪个应该等同于
50 Tattoo Desinfektionsl ö    sungst ü    cher f ü    r Fl ä    chen 
50 Tattoo Desinfektionsl ö sungst ü cher f ü r Fl ä chen
有没有一种方法,在C#中使用/.NET 4.5,将成功地重新编码的喜欢ü和Ã对UTF-8?
那么什么方法是可取的?
也就是段字符在上面的例子串某些其它字符组合的实际段字符或部分?
我已经创建了一个查找表,如果需要查找和替换下面的内容,但我不确定它是多么完整.
É -> É
“ -> "
†-> "
Ç -> Ç
à -> Ã
é, 'é
à -> ú -> ú
• -> -
Ø -> Ø
õ -> õ
à -> í
â -> â
ã -> ã
ê -> ê
á -> á
é -> é
ó -> ó
– -> –
ç -> ç
ª -> ª
º -> º
à  -> à
Guf*_*ffa 21
嗯,首先,由于数据已使用错误的编码进行解码,因此很可能某些字符无法恢复.看起来它是使用8位编码错误解码的UTF-8数据.
没有内置的方法来恢复这样的数据,因为它不是你通常做的事情.没有可靠的方法来解码数据,因为它已经被破坏了.
您可以尝试的是对数据进行编码,然后再使用错误的编码对其进行解码,反之亦然:
byte[] data = Encoding.Default.GetBytes(input);
string output = Encoding.UTF8.GetString(data);
在Encoding.Default使用你的系统当前ANSI编码.你可以尝试一些不同的编码,看看哪一个给出了最好的结果.
Esa*_*ija 14
由于Windows-1252编码具有5个未分配的插槽,因此数据仅部分无法恢复.Windows-1252的一些修改用控制字符填充这些,但那些不能用于Stackoverflow中的帖子.如果已使用已修改的Windows-1252,只要不丢失复制粘贴中的隐藏控制字符,就可以完全恢复.
还有一个不间断的空格字符被忽略或变成一个通常使用copypastes的空间,但是当你直接处理字节时这不是问题.
这个字符串的错误编码滥用是:
UTF-8 -> Windows-1252 -> UTF-8 -> Windows-1252
要恢复,这是一个例子:
String a = "Desinfektionslösungstücher für Flächen";
Encoding utf8 = Encoding.GetEncoding(65001);
Encoding win1252 = Encoding.GetEncoding(1252);
string result = utf8.GetString(win1252.GetBytes(utf8.GetString(win1252.GetBytes(a))));
Console.WriteLine(result);
//Desinfektionslösungstücher für Flächen
它可能是 windows-1252 编码的字符串,您将其读取为 UTF-8。
\n\n正如 Guffa 提到的,数据已损坏。
\n\n让我们看一下字节:
\n\xc3\xb6 -> UTF8 中的 C3B6
在 windows-1252\nC3 ->\xc3\x83\nB6 ->\xc2\xb6 中
\n\n所以 \xc3\xb6 ->\xc3\x83\xc2\xb6
\n\n所有这些“\xc6\x92\xc3\x82”怎么样:
\n\n\xc6\x92 ->83\n\xc3\x82 ->C2
\n\n老实说,我不知道它们为什么会出现,但你可以尝试删除它们并按照 Guffa 提到的那样进行一些转换。祝你好运
\n