1

私はこのテキストを回そうとしています:

×וויר. העתיד של רשתות חברתיות והתקשורת ×©×œ× ×•

このテキストに:

אוויר. העתיד של רשתות חברתיות והתקשורת שלנו

どういうわけか、このウェブサイト:

http://www.pixiesoft.com/flip/

それができる、そして私は自分でそれをどのようにできるのか知りたい(どんなプログラミング言語やソフトウェアでも)

UTF8としてファイルを保存するだけでは、それは実行されません。

この質問の私の動機は、修正されたヘブライ語のテキストファイルに変換したい文字化けしたテキストを含む友人のエクスポートされたXMLファイルがあることです。

XMLエクスポートは元々MySQLのインポートとエクスポートによって文字化けしていましたが、それを修正したり、問題をトレースバックしたりするために必要な情報がありません。

ありがとう。

4

6 に答える 6

4

問題は二重にエンコードされたUTF8文字列を使用したMySQLの障害であったため、MySQLがそれを解決する正しい方法です。

次のコマンドを実行すると解決します-

  • mysqldump $DB_NAME -u $DB_USER -p -h $DB_HOST.EXAMPLE.NET --add-drop-table --default-character-set=latin1 > export.sql--latin1は、MySQLが文字を分割しないように強制するためにここで使用され、それ以外の場合は使用しないでください。
  • cp export{,.utf8}.sql-バックアップコピーを作成します。
  • sed -i -e 's/latin1/utf8/g' export.utf8.sql-ファイル内のlatin1をutf8に置き換えて、8859-1ではなくUTF-8としてインポートします。
  • mysql $DB_NAME -u $DB_USER -p -h $DB_HOST.EXAMPLE.NET < export.utf8.sql-すべてをデータベースにインポートし直します。

これにより、約10分で問題が解決します。

于 2010-05-16T09:13:52.057 に答える
2

ここを見たいと思うかもしれません-この質問に対する受け入れられた答えは、のエンコーディングを推測する方法を示していますbyte[]。その場合、確認する必要があるのは、ぎこちないものから適切なバイトを取得することだけです。もちろん、推測は常に失敗する可能性があります...

于 2010-05-15T12:24:02.693 に答える
2

ジブリッシュをよく見ると、各ヘブライ文字が2文字としてエンコードされていることがわかります。これは、שלとしてエンコードされているように見えますשל

これは、UTF8またはUTF16をASCIIとして表示していることを示しています。UTF8への変換は、すでにASCIIであり、そのエンコーディングを維持するため、役に立ちません。

バイトの各ペアを読み取り、それらから元のUTF8を再構築できます。

これが私が思いついたC#です-これは非常に単純です(完全には機能しません-仮定が多すぎます)が、いくつかの文字が適切に変換されているのを見ることができました:

private string ToProperHebrew(string gibberish)
{
   byte[] orig = Encoding.Unicode.GetBytes(gibberish);
   byte[] heb = new byte[orig.Length / 2];

   for (int i = 0; i < orig.Length / 2; i++)
   {
     heb[i] = orig[i * 2];
   }

   return Encoding.UTF8.GetString(heb);
}

各バイトが2バイトとして再エンコードされたように見える場合-これにどのエンコードが使用されたかはわかりませんが、1バイトを破棄することは、ほとんどの2倍の文字にとって正しいことのようです。

于 2010-05-15T12:14:35.300 に答える
1

メタタグを使用して、ページに適切なエンコーディングを設定できます。これを行う方法の例を次に示します。

<meta http-equiv = "Content-Type" content = "text / html; charset = Windows-1255" />

このエンコーディングでうまくいくと思います。

于 2010-05-15T12:08:48.940 に答える
1

OdedとTeddyの回答に基づいて、私はこの方法を思いつきました。

public String getProperHebrew(String gibberish){
    byte[] orig = gibberish.getBytes(Charset.forName("windows-1252"));

    try {
        return new String(orig, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
        return "";
    }
}
于 2011-12-16T15:49:54.543 に答える
0

gibberish.encode('windows-1252').decode('utf-8', 'replace')

于 2010-05-26T13:41:17.460 に答える