テキストエディタ(秀丸)を使って Windows95 環境で HTML ドキュメントを
作っています。
ある日作成した HTML ドキュメントを WWW ブラウザ(MS IE4.01)で閲覧したと
ころ、ドキュメントの末端に
・
のような余計な文字が表示されていました。いろいろ試してみると、これは
「EOF制御文字」を付加して保存した際にのみ起こる現象で、ドキュメントを
バイナリエディタで確認したところ、確かに 0x1A がファイル末端に付加され
ています。
そこで
* EOF 制御文字とはなにか
* HTML ドキュメントに EOF 制御文字は存在していいのか
* WWW ブラウザは EOF 制御文字をどう扱うべきなのか
等、ご存知の方があればお聞きしたいのです。またはそれらがわかる文書等あ
ればお教え願います。
やまもとだいすけ
YAMAMOTO Daisuke wrote in <87oce4$9...@infonet.sedept.cac.co.jp>
> * EOF 制御文字とはなにか
昔、昔、CP/M という OS がありまして、こいつはファイルを、1
28バイト単位で管理していました。
で、ファイルの文字数が、1文字でも128バイトなんですね。これ
では不都合なので、テキストファイルの終わりを示すために、EOF
をつけるようになってました。
# だったと思います。古すぎて、記憶があいまいですが…
=== Nihon Application Co.,LTD. 木屋 善夫 ki...@nac.co.jp ===
> 山本と申します。
>
> * EOF 制御文字とはなにか
名前の通り、ファイルの終端を示すコードで、CP/M や MS-DOS の
テキストファイルにおける独自仕様だと記憶してます。
> * HTML ドキュメントに EOF 制御文字は存在していいのか
HTML4 の SGML 宣言によると、
(http://www.w3.org/TR/html4/sgml/sgmldecl.html)
CHARSET BASESET "ISO Registration Number 177//CHARSET
ISO/IEC 10646-1:1993 UCS-4 with
implementation level 3//ESC 2/5 2/15 4/6"
DESCSET 0 9 UNUSED
9 2 9
11 2 UNUSED
13 1 13
14 18 UNUSED
32 95 32
なので、制御コード部分については HT(9), NL(10), CR(13) 以外は
「UNUSED」で、使えない文字 = エラーということになります。
なお、該当コード、0x1A は、ASCII およびそれに準じた規格では、
SUB = SUBstitute Character (置換文字)であり、EOF などというものは存在しません。
# テキストの終端を示すのに使うコード ETX = End of TeXt 0x03 はあります。
この手の制御文字については、ISO/IEC 6429 (JIS X 0211) 符合化文字集合用
制御機能 で規定されています。
> * WWW ブラウザは EOF 制御文字をどう扱うべきなのか
全く表示しないか、または「エラー文字」としてわかるように表示するかの
いずれかが妥当かと思います。
# ちなみに、MS-IE (というか Windows の TrueType のエンジン)がその点だけの
# 文字を返してくるのは、該当コードのフォントが存在しない時だったかと
# 思います。結果として「表示不能」なのはわかるわけですな。
--
渡邊剛 (Watanabe, Go) goc...@internetsolutions.co.jp
Internet Solutions, Inc.
"YAMAMOTO Daisuke" <d-y...@remus.dti.ne.jp> wrote in message news:87oce4$9...@infonet.sedept.cac.co.jp...
> * HTML ドキュメントに EOF 制御文字は存在していいのか
Another HTML-lint <http://openlab.ring.gr.jp/k16/htmllint/index.html>
でチェックすると、以下の様に指摘されます。
>> </HTML> の後にまだ何かテキストがあります。
>>> HTMLは </HTML> が現れたらおしまいです。
つまり、0x1Aは通常の文字として認識されるべきなのでしょうね。
でもってそんなものは存在してはいけないのだと。
> * WWW ブラウザは EOF 制御文字をどう扱うべきなのか
また以下の様にも指摘されます。
>>> WWWブラウザによっては </HTML> の後も表示しますが、
>>> そんなのを期待してはいけません。
あり得ないものをどう扱うかは規定する必要もないでしょう。
(あぁ自分の言葉で記述したい…… 石野さんいつもお世話に
なってます ^^;)
--
新美 浩一@知多半島の住人
ni...@gld.mmtr.or.jp
Yoshio Kiya wrote:
> > * EOF 制御文字とはなにか
>
> 昔、昔、CP/M という OS がありまして、こいつはファイルを、1
> 28バイト単位で管理していました。
>
> で、ファイルの文字数が、1文字でも128バイトなんですね。これ
> では不都合なので、テキストファイルの終わりを示すために、EOF
> をつけるようになってました。
>
EOF = End of file の略です。ほんの蛇足...
--
/************************/
/* S. Oguma */
/* smal...@usa.net */
/************************/
>> > * HTML ドキュメントに EOF 制御文字は存在していいのか
>>
>> HTML4 の SGML 宣言によると、
>> (http://www.w3.org/TR/html4/sgml/sgmldecl.html)
>>
>> CHARSET BASESET "ISO Registration Number 177//CHARSET
>> ISO/IEC 10646-1:1993 UCS-4 with
>> implementation level 3//ESC 2/5 2/15 4/6"
>> DESCSET 0 9 UNUSED
>> 9 2 9
>> 11 2 UNUSED
>> 13 1 13
>> 14 18 UNUSED
>> 32 95 32
>>
>> なので、制御コード部分については HT(9), NL(10), CR(13) 以外は
>> 「UNUSED」で、使えない文字 = エラーということになります。
この辺はちゃんとわかってそうな人でも間違えそうな部分ですが、
(JIS X 4151: 文書記述言語SGML)
5.2.2 実体終了Ee
Eeは、実体の終了を示す信号である。システムは、Eeを表現するのに、
SGML文字と区別することができるどんな方法を用いても良い。
^Z がこれに該当するということにすれば別にエラーではありません。
ただ、Eeをどういうビットパターンにするか、そもそも渡すのか等については
SGML的には決まってません。(当事者で決めておいてね、つーこと)
渡さないと決めておいた所に ^Z が来たら、非SGML文字としてエラーに
するんでしょうかね…
それに "</HTML>" の後には Ee しか持ってこれない。
「HTMLドキュメントに…」という言い方だと、システムとして^Zが必要な
場合もあるので何とも言えなくなりますが、
「文書実現値集合(6.2)に…」であれば明確にダメと言えます。
#サーバー上にあるHTMLファイルは必ずしも文書実現値そのものではない
現実のブラウザは腐った文書もそれなりに扱ってやらんと
使いものにならないので、無視するなり警告で済ませるなりってとこでしょうか。
「どう扱うべきか」は特に決まってません。(14.4.1 誤りの検出)
------------------------------------------------------------------------------
かべ@sra-tohoku.co.jp VEGA Systems MCMXCI
「自分はレーサーだっていうのかい? たいしたことないじゃないか。」
------------------------------------------------------------------------------