ページはプロキシ経由で読み込まれますが、アクセント付きの文字が文字化けして返ってきます。プロキシを変更する前に、レスポンスのバイト列が Java String になる最初の箇所を特定してください。charset を明示しない InputStreamReader は、jsoup がドキュメントを見る前にその判断を下してしまいます。

jsoup が取得を担当する場合は、パースするまでレスポンスをひとまとまりのまま保持します。

Connection.Response response = Jsoup
    .connect("https://www.example.com/catalog")
    .proxy("proxy.example", 8080)
    .execute();
Document page = response.parse();

レスポンス API は Content-Type から導出された charset 情報を公開します。サーバーの宣言が誤っていると確認できた場合は、明示的な charset の上書きも受け付けます。プロキシのアドレスだけでは、ドキュメントがどの文字エンコーディングを使っているかは分かりません。プロキシのアカウントなしで許可された公開ページの比較が必要なら、例の HTTP ホストとポートを HTTP プロキシ一覧 の候補に置き換え、同じエンコーディングの確認はそのまま維持してください。

別の HTTP クライアントが InputStream を提供する場合、jsoup のストリームパースのオーバーロードは charset 名とベース URI を受け取ります。charset に null を渡すと、ドキュメント化された検出とフォールバックの動作が働きます。既知で正しい HTTP charset は意識して引き継ぐべきです。ベース URI は相対リンクの文脈を与えます。

バイト列が誤ってデコードされた後では、得られた String を別の charset でパースしても元のテキストは復元できません。バイト列とレスポンスのメタデータに戻ってください。受け取ったものも比較してください。プロキシのログインページや拒否応答は、要求したページとはまったく別のドキュメントである可能性があり、その中のデコード失敗ではないからです。

関連記事