web-dev-qa-db-ja.com

üやÃなどの特殊文字を元のC#のラテン文字に変換する

私は、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で利用可能ですか?

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

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

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

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

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

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

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

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

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

21
Guffa

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
14
Esailija

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

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

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

windows-1252 C3->ÃB6->¶

だからö->ö

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

ƒ-> 83Â-> C2

正直なところ、なぜ表示されるのかわかりませんが、Guffaが述べたように、それらを消去して変換することができます。幸運を

4
el vis

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

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

1

以前、この文字の問題に悩まされてきました。解決:

私の。(cs)htmlファイルはUTF-8でした。 UTF-8Y(BOM付きのUTF-8)に変換しました。

0
Alhan Ozdemir