私は、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
ü
やÃ
などをUTF-8
に正常に再エンコードするメソッドがC#/。Net 4.5で利用可能ですか?
それ以外の場合、どのアプローチが推奨されますか?
また、上記の例の文字列の段落文字¶
は、実際の段落文字または他の文字の組み合わせの一部ですか?
以下の検索と置換を行う必要がある場合にルックアップテーブルを作成しましたが、それがどの程度完全かはわかりません。
É -> É
“ -> "
†-> "
Ç -> Ç
à -> Ã
é, 'é
à -> ú -> ú
• -> -
Ø -> Ø
õ -> õ
à -> í
â -> â
ã -> ã
ê -> ê
á -> á
é -> é
ó -> ó
– -> –
ç -> ç
ª -> ª
º -> º
à -> à
まあ、まず第一に、データが間違ったエンコードを使用してデコードされているため、一部の文字を回復することが不可能である可能性があります。 8ビットエンコーディングを使用して誤ってデコードされたUTF-8データのようです。
このようなデータを回復するための組み込みの方法はありません。これは、通常は行うことではないからです。データは既に壊れているため、データをデコードする信頼できる方法はありません。
試すことができるのは、データをエンコードし、間違ったエンコードを使用してデコードすることです。
byte[] data = Encoding.Default.GetBytes(input);
string output = Encoding.UTF8.GetString(data);
Encoding.Default
は、システムに現在のANSIエンコーディングを使用します。そこでいくつかの異なるエンコーディングを試して、どれが最良の結果をもたらすかを見ることができます。
5つの未割り当てスロットがあるWindows-1252エンコードのため、データは部分的にしか回復できません。 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
UTF-8として読み取るのは、おそらくwindows-1252でエンコードされた文字列です。
Guffaが述べたように、データは破損しています。
バイトを見てみましょう。
ö-> UTF8のC3B6
windows-1252 C3->ÃB6->¶
だからö->ö
これらすべての「ƒÂ」はどうですか:
ƒ-> 83Â-> C2
正直なところ、なぜ表示されるのかわかりませんが、Guffaが述べたように、それらを消去して変換することができます。幸運を
ここで完全なリストを見つけることができます:
http://bueltge.de/wp-content/download/wk/utf-8_kodierungen.pdf
以前、この文字の問題に悩まされてきました。解決:
私の。(cs)htmlファイルはUTF-8でした。 UTF-8Y(BOM付きのUTF-8)に変換しました。