I have been given an export from a MySQL database that seems to have had it's encoding muddled somewhat over time and contains a mix of HTML char codes
such as & uuml;
and more problematic characters representing the same letters such as ü
and Ã
. It is my task to to bring some consistency back to the file and get everything into the correct Latin characters, e.g. ú
and ó
.
An example of the sort of string I am dealing with is
Desinfektionslösungstücher für Flächen
Which should equate to
50 Tattoo Desinfektionsl ö sungst ü cher f ü r Fl ä chen
50 Tattoo Desinfektionsl ö sungst ü cher f ü r Fl ä chen
Is there a method available in C#/.Net 4.5 that would successfully re-encode the likes of ü
and Ã
to UTF-8
?
Else what approach would be advisable?
Also is the paragraph character ¶
in the above example string an actual paragraph character or part of some other character combination?
I have created a lookup table in the case of needing to do find and replace which is below, however I am unsure as to how complete it is.
É -> É
“ -> "
†-> "
Ç -> Ç
à -> Ã
é, 'é
à -> ú -> ú
• -> -
Ø -> Ø
õ -> õ
à -> í
â -> â
ã -> ã
ê -> ê
á -> á
é -> é
ó -> ó
– -> –
ç -> ç
ª -> ª
º -> º
à -> à
Well, first of all, as the data has been decoded using the wrong encoding, it's likely that some of the characters are impossible to recover. It looks like it's UTF-8 data that incorrectly decoded using an 8-bit encoding.
There is no built in method to recover data like this, because it's not something that you normally do. There is no reliable way to decode the data, because it's already broken.
What you can try, is to encode the data, and decode it using the wrong encoding again, just the other way around:
byte[] data = Encoding.Default.GetBytes(input);
string output = Encoding.UTF8.GetString(data);
The Encoding.Default
uses the current ANSI encoding for your system. You can try some different encodings there and see which one gives the best result.