ステップ記:httpComponentsのEnttityUtils

7797 ワード

今日書いたサービスプログラムの中には、得られたデータが中国語で文字化けしているという報告がありますが、私はapacheでhttpComponentsを通じてデータを取得したので、ログのdebugレベルを開きます。
ログで中国語がなくなっているのを発見しました。文字化けがあります。2014-07-02 16:35:01.348 DEBUG [Wire.java:86] http-outgoing-8 << "1.0" encoding="UTF-8"?>... subject="[0xe6][0x88][0x91][0xe6][0x98][0xaf][0xe4][0xb8][0xad][0xe6][0x96][0x87][0xe4][0xb8][0xbb][0xe9][0xa2][0x98]" ... 私が送った新聞はどうして文字化けができますか?utf-8コードを設定したのに。
実は、これは第一ピットです。http Componentsの日記を書く時、中国語をこのようなフォーマットに変えました。実は正しいですかわいそうな私はこの穴の中を長い間回ってみてやっと発見しました。
最後に探しましたが、カバンを通してやっと発見しました。中国語の新聞を発送しても受信しても大丈夫です。長い間繰り返してみたが、リモートサーバが戻ってきた時、コードを返しませんでした。パッケージのコードを取得するのはEnttityUtilsです。CloseableHttpResponse httpResponse = httpClient.execute(get); HttpEntity httpResponseEntity = httpResponse.getEntity(); String s = EntityUtils.toString(httpResponseEntity); 大丈夫みたいです。しかし、これは大きな穴です。http Componentsのデフォルトコードはutf-8ではありません。そこでこのsは乱れてしまいました。正しい書き方はEntityUtils.toString(httpResponseEntity, "utf-8"); ちなみに、以前私と同僚が踏んだ穴があります。EntityUtils.toString(httpResponseEntity, "utf-8"); この行のコードはhttp要求時に必ず呼び出さなければなりません。あるいは、戻ってきた包体流は読み終えなければなりません。帰りは200 OKではないとしても!以前は戻るパックの内容に関心がなかったので、調整しませんでした。そして最初の要求は成功できますが、二つ目の要求は引っかかってしまいます。もっとひどいのは200 OKの時に鞄の流れを読んで、間違った時に直接異常を投げたり戻ったりします。そしてプログラム作業は正常に見えますが、時々のカードやカード…