hns - 日記自動生成システム - Version 2.19.9

先月 2008年03月 来月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Namazu for hns による簡易全文検索
詳しくは 詳細指定/ヘルプを参照して下さい
検索式:

2008年03月09日() 旧暦 [n年日記] [更新:"2008/03/10 01:09:27"]

#1 [Mime] mixi からのメールの題名が読めなくなって

人に言われて気が付いたのだけれど、3/4/2008 から、mixi から 来るメールの題名の符号化が変ったらしい。Wanderlust で読んでいると、
(mel) Invalid encoded-text W21peGldIB .... RyQ5ISobKEI==
のような字が見えて文字にならない。しかし、これを gmail に転送して見ると、 僅かに例外はあるが読める。そこで調べると、これは flim-1.14.9 の mel.el の中の 196 行目で問題になっているらしい。
   153  (defvar mel-b-builtin
   154     (and (fboundp 'base64-encode-string)
   155          (subrp (symbol-function 'base64-encode-string))))
   156  
   157  (when mel-b-builtin
   158    (mel-define-backend "base64")
   159    (mel-define-method-function (mime-encode-string string (nil "base64"))
   160                                'base64-encode-string)
   161    (mel-define-method-function (mime-decode-string string (nil "base64"))
   162                                'base64-decode-string)
   163    (mel-define-method-function (mime-encode-region start end (nil "base64"))
   164                                'base64-encode-region)
   165    (mel-define-method-function (mime-decode-region start end (nil "base64"))
   166                                'base64-decode-region)  
   167    (mel-define-method mime-insert-encoded-file (filename (nil "base64"))
   168      "Encode contents of file FILENAME to base64, and insert the result.
   169  It calls external base64 encoder specified by
   170  `base64-external-encoder'.  So you must install the program (maybe
   171  mmencode included in metamail or XEmacs package)."
   172      (interactive "*fInsert encoded file: ")
   173      (insert (base64-encode-string
   174               (with-temp-buffer
   175                 (set-buffer-multibyte nil)
   176                 (binary-insert-encoded-file filename)
   177                 (buffer-string))))
   178      (or (bolp) (insert ?\n)))
   179    (mel-define-method mime-write-decoded-region (start end filename
   180                                                        (nil "base64"))
   181      "Decode the region from START to END and write out to FILENAME."
   182      (interactive "*r\nFWrite decoded region to file: ")
   183      (let ((str (buffer-substring start end)))
   184        (with-temp-buffer
   185          (insert str)
   186          (base64-decode-region (point-min) (point-max))
   187          (write-region-as-binary (point-min) (point-max) filename))))
   188      
   189    ;; (mel-define-method-function (encoded-text-encode-string string (nil "B"))
   190    ;;                             'base64-encode-string)
   191    (mel-define-method encoded-text-decode-string (string (nil "B"))
   192      (if (string-match (eval-when-compile
   193                          (concat "\\`" B-encoded-text-regexp "\\'"))
   194                        string)
   195          (base64-decode-string string)
   196        (error "(mel) Invalid encoded-text %s" string)))
   197    )
   198  
Invalid encoded-text というのは いくつかあるので、それらを区別するのに (mel) という字を加えてある。 この問題は、 「string の中に、B-encoded-text-regexp があるはずだが見つからない」ということで、 B-encoded-text-regexp を探すと、mime-def.el にある。
   161  ;;; @@ base64 / B
   162  ;;;
   163  
   164  (defconst base64-token-regexp "[A-Za-z0-9+/]")
   165  (defconst base64-token-padding-regexp "[A-Za-z0-9+/=]")
   166  
   167  (defconst B-encoded-text-regexp
   168    (concat "\\(\\("
   169            base64-token-regexp
   170            base64-token-regexp
   171            base64-token-regexp
   172            base64-token-regexp
   173            "\\)*"
   174            base64-token-regexp
   175            base64-token-regexp
   176            base64-token-padding-regexp
   177            base64-token-padding-regexp
   178            "\\)"))
base64-token-regexp は一文字づつなので、これって文字数が合わないということになるのかな
          ...          7   
1         ...          0  345 
W21peGldIB...     RyQ5ISobKEI==
確かに 73 文字 + EI== になっていて 73 が 4 の倍数ではない。 一文字削ったら、文字は途中から化けてはいるが、一部読めるようになった。

やはり mixi 側の問題の気がして来た。... (まさか最近 base64 符号化に一文字追加されることになった、なんてはずはないよね)
一応お知らせは送っておきました。
最初に教えてもらった人からの情報ですが、「単に = が一つ多い(多過ぎる)」だけのようです。 手でその部分を一つ減らすと、読めるようになります。




最近の日記
2024年03月10日
停電 (瞬電)
2024年03月03日
the second try on bare-metal
useradd
2024年02月29日
opendkim and senmail
2024年01月24日
chat/iam 0.0.8
2024年01月21日
uselocale vs setlocale (textproc/R-readxl)
以上、1 日分です。
タイトル一覧
カテゴリ分類
Powered by hns-2.19.9, HyperNikkiSystem Project

Count.cgi (since 2000/02/05)