ちょっと検証した結果、
ヘッダ:
Content-Type: text/html
ボディ:
<html><head> ... <meta http-equiv="Content-Type" content="text/html;
charset=shift_jis"> ... </head> ...
といったHTMLメール(本文はSJISをquoted-printableしました)で、
> 1399 /*
> 1400 * Convert and return as new String
> 1401 */
> 1402 String str = IOUtils.toString(in, charset);
ここで、単純に charset = "shift_jis" と固定にしてもダメでした。
もちろん、
ヘッダ:
Content-Type: text/html; charset=shift_jis
とすれば化けません。どうやら、
> src/com/fsck/k9/mail/internet/MimeUtility.java
> 1021 InputStream in = part.getBody().getInputStream();
> 1022 return readToString(in, charset);
のgetInputStream()で、
src/com/fsck/k9/mail/internet/TextBody.java
55 public InputStream getInputStream() throws MessagingException {
56 try {
57 byte[] b;
58 if (mBody != null) {
59 b = mBody.getBytes(mCharset);
60 } else {
61 b = EMPTY_BYTE_ARRAY;
62 }
63 return new ByteArrayInputStream(b);
64 } catch (UnsupportedEncodingException usee) {
65 return null;
66 }
67 }
としているのですが、このgetBytes(mCharset)のmCharsetがメールヘッダのcharsetから決まっており、
これのデフォルトがUTF-8になっている模様。
(1) メール受信時に、内部DBへの格納
(2) メール表示時に、内部DBからの読み込み
を行うわけですが、上記の処理は(2)のときに動いており、化けている原因は(1)時点で保持するmCharsetが(メールヘッダにcharsetがないために)
UTF-8に設定されているために化けているようです。
・・なのかな?また、後で検証します。
--
Koji Arai
やはり、最初の予想があってるようです。
非常に迷走してますが、検証でなにか間違えてたみたい。
ここで、今日は時間切れです。
こんな調子なので開発が進まないですorz