2

ウィキペディアのテキストを処理するコードを書いていますが、ダッシュが文字化けする問題があります。私はこれまでダッシュやその他の非標準の文字を使用したことがないので(キーボードに表示されない文字である私にとっては非標準です;)、自分が何であるかをどこに向ければよいかわかりません。間違ったこと。これが、コードスニペットとともに何が起こっているかです。

記事の内容についてウィキペディア(ウィキペディアとの通信にApache HttpComponentsクライアントAPIを使用しています)にリクエストを送信し、文字列に保存します。

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);

この時点で、「responseBody」をSystem.outに送信すると、ダッシュがEclipseコンソールに「?」として表示されます。これはEclipseコンソールの表示の問題である可能性があるため、次に進みます。

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

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);

ウィキペディアにアップロードされたテキストがWebブラウザーに表示されると、以前はダッシュで表示されていたものが「?」として表示されるようになりました。ボックス内(不明な文字?)。したがって、どこかで誤ってダッシュを変更したり、誤ってコーディングしたりしていますが、正確な場所はわかりません。

誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

1

さて、本当の答えです。英語以外の文字がマングルされる問題は、ApacheHTTPComponentsやJava文字列の処理/操作とは何の関係もありませんでした。問題は、Windowsで実行されているEclipseIDEにありました。

実行構成のEclipseは、デフォルトでシステムのデフォルトのエンコード方式であるCp1252forWindowsを使用します。Cp1252はすべてのUTF-8文字をサポートしているわけではないため、問題が発生します。私はここで解決策を見つけました。Eclipseでは、実行構成に入ります。実行しようとしているプロジェクトについては、[共通]タブに移動します。エンコーディングのセクションがあります。「デフォルト」から「その他」に変更し、エンコーディングをUTF-8に設定します。

すべてが順調に進んでいます。

于 2011-07-04T23:47:17.807 に答える
0

なぜエンダッシュが壊れているのか、私はまだ理解していません。その間に(おそらく厄介な)修正があります。

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

基本的に、「不明な」UTF-8文字のすべてのインスタンスをendash文字に置き換えています。これは、元のコンテンツに「不明な」文字に変換される他のUTF-8文字が含まれていないことを前提としています。

于 2011-07-02T19:16:00.353 に答える