xsl を使用して xml ファイルの出力を制御していますが、BOM 文字が追加されています。
6 に答える
# vim file.xml
:set nobomb
:wq
これを xslt ファイルに追加するだけです。
<xsl:output method="text"
encoding="ASCII"/>
XSLTを使用して文字列からBOMシンボルを削除するのは非常に簡単です。
<xsl:value-of select="translate(StringWithBOM,'','')"/>
任意の 16 進エディタを使用して、最初の 2 バイトを取り除くだけです。
XSLで使用する出力エンコーディングは何ですか?入力ドキュメントはどのエンコーディングですか?入力はどこから来て、その間にどこに保存/アップロード/ダウンロードされましたか?
XMLとXSLは、他に何も指定されていない場合、デフォルトでUTF-8を使用する必要があります。しかし、明らかに、ここで問題が発生しています。
発生する可能性のあることの1つは、XMLがデフォルトでISO-8859-1で提供されるように設定されているWebサーバーによって提供されていることです。これは、かなり適切なデフォルトです...pre-Unicode。
少し話題から外れていますが、テキストエンコーディングに関するJoelの非常に有益な記事は、私にとって目を見張るものでした。プログラミングについては非常に賢いが、「プレーンテキスト」やテキストを「ASCII」や「ANSI」と呼んでいるようなものがあると考え続けている人はたくさんいます。まだ理解していない場合は、これを理解する必要があります。
XML は Unicode で、一部の Unicode エンコーディングで記述することが推奨されており、特定の Unicode エンコーディングは最初のバイト順マークを含むように指定されているという印象を受けました。そのバイト順マークがないと、ファイルは Unicode エンコーディングで正しくエンコードされなくなり、したがって正しい XML ではなくなります。XML プロセッサは容赦なく、わずかなエラー (正しくない Unicode エンコーディングなど) ですぐに失敗することが推奨されます。どの種類の XML プロセッサを破壊しようとしていますか?
明らかに、UTF-8 でエンコードされたドキュメントからバイト順マークを取り除くと、そのドキュメントは ASCII でエンコードされた (Unicode ではない) ように見えます。一部のテキスト プロセッサは、ASCII でエンコードされたドキュメントしか使用できません。これはあなたが働いているものですか?