私はapacheHttpClientを使用しています。そして、私が「サイトを読む」ことを試みているとき、すべての英語以外のコンテンツは間違って表現されます。
実際には、windows-1252で表されますが、UTF-8である必要があります。どうすればこれを修正できますか?
を使用しようとしましたInputStreamReader (inputStream, Charset.forName ("UTF-8"))
が、役に立ちませんでした(間違った記号が????????に変換されました)。
私はapacheHttpClientを使用しています。そして、私が「サイトを読む」ことを試みているとき、すべての英語以外のコンテンツは間違って表現されます。
実際には、windows-1252で表されますが、UTF-8である必要があります。どうすればこれを修正できますか?
を使用しようとしましたInputStreamReader (inputStream, Charset.forName ("UTF-8"))
が、役に立ちませんでした(間違った記号が????????に変換されました)。
ファイルが Windows-1252 にある場合、UTF-8 を使用するように指示しても機能しません。文字セット名として Windows-1252 を指定すると、正しいデータを読み取ることができます。データがどのような形式であるべきかを知ることは、それが実際にどのような形式であるかを知ることほど役に立ちません:)
UTF-8で書き直すかどうかはあなた次第です...
正しい文字エンコーディングを見つけるのは、ちょっとした悪夢のようです。サイトのコンテンツによっては、以下が役立つ場合があります。私が過去に行ったことの 1 つは、正しい文字エンコーディングを決定するために複数のメソッドを使用するクラスに依存することです。
rome プロジェクトのXmlReaderは、UTF バイト オーダー マークや XML 宣言を使用して、正しいエンコーディングを決定します。
したがって、次の構成を使用できます。
new BufferedReader(new XmlReader(inputStream))
コンテンツに到達します。
ページの「Content-Type」ヘッダーにエンコーディングがある場合、HttpClient はそれを受け入れます。そうでない場合は、Windows-1252 ではなく、Latin-1 と見なされます。本当に Windows-1252 を取得していますか? このようにエンコーディングを確認できます。
String encoding = method.getResponseCharSet();
応答が実際に UTF-8 を使用していることがわかっているが、ヘッダーでそれが指定されていない場合は、次のように強制的に UTF-8 を読み取ることができます。
byte[] body = method.getResponseBody();
String response = new String(body, "UTF-8");