「美文書第5版」のp.373のスクリプト

Re: 「美文書第5版」のp.373のスクリプト

- Z. R. の投稿
返信数: 0

改訂版のアップロードお疲れ様でした。

>「二重デコード」が起こるのは input がいわゆる latin1 だけからなるストリングの場合に限られるのではないでしょうか?

これについては、お察しの通りです。本当に蛇足ながら解説しておくと:

(a) C4 82 C2 B7
↓ UTF-8デコード
(b)102 B7 → Unicode文字列〈Ă·〉
× UTF-8デコード不能
(c)

UTF-8で書かれたテキストがLatin-1以外(U+0100以上の符号値)の文字を含むということは、すなわち(b)のPerl文字列が0x100以上の符号値を含むことになります。このようなPerl文字列はそもそも「バイト列と看做す」こと自体ができないので、これが「2度目のUTF-8デコード」を通す可能性はありません。先に書いた通り、この場合はutf8::decode()は偽を戻り値とします。

従って、「二重でコード」が起こるのはテキストがLatin-1の文字(U+0000~00FF)のみを含む場合に限られます。ただし、件のスクリプトは行ごとにデコードを行っているので、「Latin-1のみを含む行」が必要条件であることに注意を要します。実際、私が返信で挙げた例も、全体としてはLatin-1でない文字(先頭コメント行の日本語)を含んでいます。

>この「元のフィルタ」は,そういう意味で,美文書掲載の ptexfilter のことではないですよね。

私が実験に用いたのは、サポートページにある修正前のptexfilterでした。ただ美文書掲載のものもコメント部分が違うだけのように見えますが…