字符编码-转换特殊字符,如ü;和#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

否则,什么方法是可取的?

此外,上面示例字符串中的段落字符是实际的段落字符还是其他字符组合的一部分?

在需要查找和替换的情况下,我创建了一个查找表,如下所示,但我不确定它有多完整。

É -> É
“ -> "
†-> "
Ç -> Ç
à -> Ã
é, 'é
à -> ú -> ú
• -> -
Ø -> Ø
õ -> õ
í -> í
â -> â
ã -> ã
ê -> ê
á -> á
é -> é
ó -> ó
– -> –
ç -> ç
ª -> ª
º -> º
à  -> à

字符编码-转换特殊字符,如ü;和#195;ƒ回到了他们最初的,拉丁字母alphbet在C#中的对应

首先,由于数据是使用错误的编码解码的,因此某些字符可能无法恢复。它看起来像是使用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)。