2

Wikipediaのテキストを扱うコードを作成していて、enダッシュが文字化けする問題があります。私はenダッシュや他の非標準文字で作業していません(私のキーボードに表示されない文字であることは標準ではありません;)ので、私が何を指しているのかはわかりません間違っている。ここでは、コードスニペットと一緒に起こっていることがあります.....http応答処理中またはテキスト操作中に "En dash"が文字化けしています

記事の内容はWikipedia(私はApache HttpComponentsクライアントAPIを使用してWikipediaと通信しています)にリクエストを送信し、文字列:私はダッシュEN、System.outに「responseBody」を送信した場合、この時点で

DefaultHttpClient client = new DefaultHttpClient(); 
HttpGet queryRequest = new HttpGet(query); // query is the URL for retrieving the article contents. 
ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
String responseBody = client.execute(queryRequest, responseHandler); 

は次のように私のEclipseのコンソールに表示されています「?」。これはEclipseコンソールの表示の問題かもしれませんので、私は次のように説明します。

テキストを操作し、enダッシュを無視して、テキストをWikipediaに送り返します。

今ウィキペディアにアップロードテキストは、今のように表示される前に、ダッシュ途中だったものをWebブラウザに表示される「?」
List<NameValuePair> postParams = new ArrayList<NameValuePair>(); 
postParams.add(new BasicNameValuePair("text", content); // content is a String with the article text 
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postParams, "UTF-8"); 
HttpPost queryRequest = new HttpPost(url); // url is the basic URL for the Wikipedia api 
queryRequest.setEntity(entity); 
queryRequest.addHeader("Content-Type", "application/x-www-form-urlencoded"); 
ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
String responseBody = client.execute(queryRequest, responseHandler); 

箱の中に(未知の文字?)。したがって、どこかでenのダッシュを誤って変更したり誤っていたりしていますが、正確にどこにいるのか分かりません。

誰かが正しい方向に向かうことができますか?

+0

Eclipseコンソールは、通常、エンコードが正しく行われているので、Stringが既にマングルされていると思われます。 – artbristol

+0

私はウィキペディアのサーバーが正しいエンコーディングを送信していると仮定しています。したがって、私が受け取っているものを扱うことになります。私はこれが事実だと思っていたが、私は完全にはわからなかった。私はResponseHandlerについてもっと読む必要があると思います(Apacheのチュートリアルからコピーするだけではありません)。 – Christian

+0

http://www.joelonsoftware.com/articles/Unicode.htmlを読んでいない場合は、まずそれをお読みください。あなたのコードが正しいように見えるので、HttpClientライブラリが正しく機能していないことは珍しいことです。 – artbristol

答えて

1

本当の答えはここにあります。英語以外の文字が混乱しているという問題は、Apache HTTPComponentsやJavaの文字列操作/操作とは関係ありませんでした。この問題は、Windows上で実行されているEclipse IDEに問題がありました。

Eclipseの実行コンフィギュレーションでは、デフォルトでシステムのデフォルトのエンコード方法Cp1252 for Windowsが使用されます。 Cp1252はすべてのUTF-8文字をサポートしていないため、問題が発生します。私はsolution hereを見つけました。 Eclipseでは、Run Configurationsに移動します。実行しようとしているプロジェクトについては、[共通]タブに移動します。エンコーディングのセクションがあります。 「デフォルト」から「その他」に変更し、エンコードをUTF-8に設定します。

今はすべて正常です。

+0

うわー、私は、私が同僚の一人に責任を負う文字エンコーディングのバグが、この設定を変更せずにWindows上のEclipseから自分のテストを行っていることがほぼ確実であることを認識しました。ありがとう!! – jkraybill

0

まだ、なぜエンドシャシが乱されているのかまだ分かりません。私は平均して(おそらくkludgy)修正があります。

String unknownUTF = String.copyValueOf(Character.toChars(65533)); 
content = content.replace(unknownUTF, "\u2013"); 

私は基本的に '未知の' UTF-8文字のすべてのインスタンスをendash文字に置き換えています。これは元のコンテンツに「未知」の文字に変換されている他のUTF-8文字が含まれていないと仮定して動作します。

+0

私が言及した前提は大きな仮定(および間違ったもの)でした。英語以外の文字や文字が文字化けしていることが判明しました。私はちょうどロシア語に関する記事でそれを試してみました。多くの人物が「?」に変わっています。適切な性格を保持していません。 – Christian

関連する問題