19

私はMySQLデータベースからのエクスポートを受け取りました。これは、時間の経過とともにエンコーディングが多少混乱したようで、 や などの同じ文字を表すより問題のある文字が混在してHTML char codes& uuml;ます。ファイルにある程度の一貫性を戻し、すべてを正しいラテン文字に変換するのが私の仕事です。üÃúó

私が扱っている種類の文字列の例は

Desinfektionslãsungstãƒâ¼cher fãâ¼r Flãâ¤chen

に等しくする必要があります

50 Tattoo Desinfektionsl ö    sungst ü    cher f ü    r Fl ä    chen 
50 Tattoo Desinfektionsl ö sungst ü cher f ü r Fl ä chen

üC#/.Net 4.5 で、やÃtoなどを正常に再エンコードする方法はありUTF-8ますか?

それ以外の場合、どのようなアプローチが推奨されますか?

また、上記の例の文字列の段落文字は、実際の段落文字ですか、それとも他の文字の組み合わせの一部ですか?

以下の検索と置換を行う必要がある場合に備えて、ルックアップテーブルを作成しましたが、それがどの程度完全かはわかりません。

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

5 に答える 5

27

まず第一に、データが間違ったエンコーディングを使用してデコードされているため、一部の文字を復元できない可能性があります。8 ビット エンコーディングを使用して誤ってデコードされた UTF-8 データのようです。

このようなデータを回復する組み込みの方法はありません。これは通常行うことではないためです。データは既に壊れているため、データをデコードする信頼できる方法はありません。

あなたが試すことができるのは、データをエンコードし、間違ったエンコーディングを使用して再度デコードすることです。

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

Encoding.Default、システムの現在の ANSI エンコーディングを使用します。そこでいくつかの異なるエンコーディングを試して、どれが最良の結果をもたらすかを確認できます。

于 2013-02-20T13:01:30.737 に答える
15

割り当てられていないスロットが 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
于 2013-02-20T16:50:40.923 に答える
4

おそらく、UTF-8として読み取ったwindows-1252でエンコードされた文字列です。

Guffa が述べたように、データは破損しています。

バイトを見てみましょう:
ö -> C3B6 in UTF8

Windows-1252 では C3 ->Ã B6 ->¶

そう ö ->ã¶

これらすべての「ƒÂ」はどうですか:

ƒ ->83 Â ->C2

正直なところ、なぜそれらが表示されるのかわかりませんが、グッファが述べたように、それらを消去していくつかの変換を行うことができます. 幸運を

于 2013-02-20T13:58:43.473 に答える
1

ここで完全なリストを見つけることができます:

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

于 2014-03-17T08:53:42.843 に答える