requests+pyqueryで文字列の扱いに悩まされるのは主に二箇所ある。そしてその組み合わせのエラーが出るので悩ましい。
一点目はrequestsでの文字化け
requestsでcontentとtextの違いはtextはr.encodingでdecodeされたunicode文字列だということだ。なので正しくデコードされたunicode文字列を推定できればrequestsでの文字化け問題は解決する
だが常にunicode文字列をpyqueryに渡せばOKかというとそうでもない。
Unicode文字列をpyqueryに渡すと起きるエラー(Unicode strings with encoding declaration are not supported.)
常にUnicode文字列を渡すようにすると Unicode strings with encoding declaration are not supported. というエラーが散見されるようになる。これはpyqueryが内部的に使っているlxmlがヘッダーにエンコーディングが指定しているHTMLを渡すとそれにあわせてデコードしようとするらしく、既にユニコード文字列化されたHTMLもその作法にしたがってエラーになるというものだ。
というわけでこの場合はもとのstr文字列を渡さないといけないらしい。
これが結構面倒くさい。requestsでヘッダーにエンコーディングが指定されているかどうか知るオプションあるんかね?