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