字符编码-转换特殊字符,如ü;和#195;ƒ回到了他们最初的,拉丁字母alphbet在C#中的对应
本文关键字:#195 拉丁字母 alphbet 他们 特殊字符 转换 编码 #188 字符 | 更新日期: 2023-09-27 18:00:19
我收到了一个MySQL数据库的导出,随着时间的推移,该数据库的编码似乎有些混乱,其中包含HTML char codes
(如& uuml;
)和更多有问题的字符,这些字符表示相同的字母,如ü
和Ã
。我的任务是让文件恢复一些一致性,并将所有内容转换为正确的拉丁字符,例如ú
和ó
。
我正在处理的字符串类型的一个例子是
设计人员
这应该等同于
50 Tattoo Desinfektionsl ö sungst ü cher f ü r Fl ä chen
50 Tattoo Desinfektionsl ö sungst ü cher f ü r Fl ä chen
C#/中有可用的方法吗。Net4.5,它将成功地将ü
和Ã
等重新编码为UTF-8
?
否则,什么方法是可取的?
此外,上面示例字符串中的段落字符¶
是实际的段落字符还是其他字符组合的一部分?
在需要查找和替换的情况下,我创建了一个查找表,如下所示,但我不确定它有多完整。
É -> É
“ -> "
†-> "
Ç -> Ç
à -> Ã
é, 'é
à -> ú -> ú
• -> -
Ø -> Ø
õ -> õ
à -> í
â -> â
ã -> ã
ê -> ê
á -> á
é -> é
ó -> ó
– -> –
ç -> ç
ª -> ª
º -> º
à -> à
首先,由于数据是使用错误的编码解码的,因此某些字符可能无法恢复。它看起来像是使用8位编码错误解码的UTF-8数据。
没有像这样的内置方法来恢复数据,因为这不是你通常做的事情。没有可靠的方法来解码数据,因为它已经坏了。
你可以尝试的是对数据进行编码,然后再次使用错误的编码进行解码,只是相反:
byte[] data = Encoding.Default.GetBytes(input);
string output = Encoding.UTF8.GetString(data);
Encoding.Default
为您的系统使用当前的ANSI编码。你可以在那里尝试一些不同的编码,看看哪种编码效果最好。
由于Windows-1252编码有5个未分配的插槽,数据仅部分不可恢复。Windows-1252的一些修改用控件填充了这些字符,但这些字符无法在Stackoverflow中发布。如果修改Windows-1252已经使用过,只要不丢失,就可以完全恢复复制粘贴中隐藏的控制字符。
还有一个非中断空格字符,它被忽略或变成一个空格,通常使用复制粘贴,但当您直接处理字节时,这不是问题。
这个字符串所经历的错误编码滥用是:
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。
正如古法所提到的,数据已被破坏。
让我们看看字节:
ö->UTF8 中的C3B6
在窗口-1252C3->B6->¶
soö->
那么所有这些"ƒ"呢:
ƒ->83->C2
老实说,我不知道它们为什么会出现,但你可以试着删除它们,并像古法提到的那样进行一些转换。祝好运
在这里你可以找到一个完整列表:
http://bueltge.de/wp-content/download/wk/utf-8_kodierungen.pdf
我以前遇到过这个char问题。解决方案:
我的。(cs)html文件为UTF-8;我转换成了UTF-8Y(UTF-8带BOM)。