转换的特殊本地字符,如那张和ダ回在C#中原来的,拉丁alphbet同行(Converting spe

2019-08-17 02:10发布

我一直在考虑从似乎有它的编码方式有点糊涂随着时间的推移和包含的混合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

还有什么办法将是可取?

也就是段字符在上述例子串某些其它字符组合的实际段字符或部分?

我在需要做查找和替换,低于的情况下创造了一个查找表,但我不能确定它是如何完成。

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

Answer 1:

好吧,首先,因为数据已经使用了错误的编码解码,很可能是某些字符都无法恢复。 它看起来像它是使用8位编码不正确解码UTF-8的数据。

没有内置的方法来恢复这样的数据,因为它不是东西,你通常做。 还有就是要对数据进行解码没有可靠的方法,因为它已经打破。

可尝试的,是对数据进行编码,并再次使用了错误的编码,就在其他的方式对其进行解码:

byte[] data = Encoding.Default.GetBytes(input);
string output = Encoding.UTF8.GetString(data);

Encoding.Default使用你的系统当前ANSI编码。 你可以尝试一些有不同的编码,看看哪一个提供了最好的结果。



Answer 2:

的数据是仅部分地不可恢复由于具有5个未分配时隙的Windows-1252的编码。 Windows的1252的一些改进填补这些与控制字符,但那些不使其在#1的帖子。 如果修改后的Windows 1252已经使用,你可以为你不拷贝粘贴失去隐藏的控制字符完全恢复,只要。

另外还有一点被忽略或变成通常copypastes空间的非间断空格字符,但是当你直接处理的字节,这不是一个问题。

该misencoding滥用此字符串所经历是:

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


Answer 3:

这也可能是您解读为UTF-8个窗口-1252编码字符串。

作为Guffa提到的数据已损坏。

让我们上个字节来看看:
ö - >在UTF8 C3B6

在窗口1252 C3 - >一个B6 - >¶

相比ö - >A¶

什么对所有这些“ƒä”:

ƒ - > 83 - > C2

诚信,我不知道为什么他们会出现,但你可以尝试删除它们,并做一些转换为Guffa提及。 祝好运



Answer 4:

在这里,你可以找到一个完成者名单:

http://bueltge.de/wp-content/download/wk/utf-8_kodierungen.pdf



Answer 5:

我已经通过这个字符问题之前一直困扰。 解:

我的(CS)的HTML文件是UTF-8; 余转换为UTF-8Y(UTF-8与BOM)。



文章来源: Converting special charactes such as ü and à back to their original, latin alphbet counterparts in C#