- ベストアンサー
encoding="UTF-16" ってUTF-16で書かれても。
以前からずっと疑問だったのですが。。。 XML宣言の中に、エンコーディングを記述するところがありますが、その宣言文字列自体をそのエンコーディングで記述するというのはおかしくないでしょうか。 たとえば、UTF-16だったら、 encoding="UTF-16" と書くわけですが、これ自体がUTF-16で書かれているわけですよね? UTF-16で書かれているとわかっていたら宣言する必要はないし、宣言読まないとわからないんだったら、この宣言自体も読めないはずです。 今実際に、UTF-16で書かれていて、エンコーディング宣言もしているXML文書をあるソフトで読もうとしているのですが、1バイト目を読んだところで「Unexpected character. position = 0 」と出力されてエラーになります。 強制的にUTF-16で読ませる昨日もあるので、そうすればエラーは起こりませんが、それじゃエンコーディング宣言の存在自体に意味がないのでは? これは、最初の時点で読めないこと自体がこのソフトの不具合なのでしょうか? これってどういうことなんでしょう。解決できるんでしょうか。
- みんなの回答 (7)
- 専門家の回答
お礼
ありがとうございました。 つまり、xmlというのは、 ・UTF-16 ・ASCIIの上位文字セット だけでしか記述できないという仕様である、というわけですね。やはり、基本的には「汎用機の文字セットなどではXMLは記述できない」となりますね。少なくとも規格としてはサポートできない。FEFFなどを文字として扱う処理系があったらもうダメですからね。 そして、「encoding=」で記述するのは、ASCIIの上位セットの判別のためだけ、ということになるんでしょうか。つまり、UTF-16で書いている場合には、最初の2バイトで判別しているので、「encoding=」で指定しても意味がない、ということになるわけですからね。 それでしたら納得です。やっぱり「encoding='UTF-16'」は意味がないみたいですね。ダブルチェックのためくらいには使えるかもしれないですけど、それを読んで判別しているわけではないのですね。 どうもありがとうございました。長年の謎が(釈然とはしないながらも)理解できました。
補足
あ、訳までして頂いたんですね! 本当に本当にありがとうございました。とても役に立ちました。<(_ _)>