2012-12-14 11 views
5

またはISO/WINDOWS/UTF-8の混合物)。素敵な帽子(Â)がたくさんあります。ヒューリスティックを使用して不正にエンコードされたテキストを修正するためのJavaライブラリ

明らかに、外部Webサービスが文字列をどのように格納して情報が失われるのかを修正できません。したがって私が知っている100%の翻訳の希望は不可能です。

しかし、誰かがヒューリスティックな文字マッピングライブラリをJavaで書いていることを期待していました。

私はポートこの男のPHPコードことができますねない場合:https://stackoverflow.com/a/3521340/318174

UPDATEと説明: @VGRのような単純な変換が動作しませんと答えました。私は元のバイトを持っていません。エンドポイントでデータが正しく変換されませんでした(SOAPサーバーの可能性がありますgetBytes(/*with out correct encoding*/)が実行されたか、またはデータが不正な形式で格納されている可能性があります)。バイトをJavaのStringsに変換すると、エンコーディングがどこでも同じでなければ、データは保持されません。 ASCII < - >UTF-8のようなものを考えれば分かります。 Windows-1252またはISO Latinでは、データが失われることはありませんが、しばしば混乱するため、はるかに複雑です。これらのエンコーディングは2バイトで、UTF-8のサブセットではないためです。

あなたが私を信じていない場合は、getBytes()をさまざまなエンコードで元に戻してみると、データが破損してデータが失われることがあります。

+0

UTF-8バイトが個別の文字として渡されている場合は、コメント。 –

答えて

0

誤ってエンコードされたデータの性質を誤解している可能性がありますが、そのPHPコードは私にとって過酷なものです。

String fix(String s) { 
    byte[] bytes = s.getBytes(Charset.forName("windows-1252")); 
    return new String(bytes, StandardCharsets.UTF_8); 
} 
+0

データが既に破損しているため、これは機能しません。元のバイトがあれば、それはうまくいくでしょう。私があなたのリストに載っているものは、私が非常に認識しているものです。 –

+0

@AdamGentこれはPHPコードの機能ですが、ISO-8859-1ではなくWindows-1252を使用する必要があります。あなたはあなたが持っているものとそれが何であるべきかの例を示すことができますか? – Esailija

+0

あなたは正しいです。コードが更新されました。私は、すべてのUTF-8バイトも有効なISO-8859-1文字であると考えていましたが、そうではありません。 – VGR

関連する問題