1

コンソール ログからエラーを grep し、Perl を使用して XML を形成しようとしています。一部のファイルでは、「コード ポイント \u0008 は /codepath/getErrors.pl 行 498 の XML で有効な文字ではありません」というエラーが発生します。

\u0008 を参照すると、バックスペース文字について話しますが、これを文字列/テキストから削除する方法がわかりません。

XML 形成がエラーなしで実行されるように、コンソール ログの読み取り中にこの種の制御文字を削除する方法を教えていただければ幸いです。

これについてあなたの助けに感謝します!

4

1 に答える 1

4

実際、バックスペースはXML ファイルでは有効な文字ではありません。これは、「XML」を生成するツールが何らかの形で壊れていることを示しています。可能であれば、そこに修正を適用します。

本当にそうしなければならない場合は、次のようにファイルからバックスペースを除外できます

$ perl -pe's/\x08//g' <brokenfile.not-xml >fixedfile.still-not-xml

ファイルに他の制御文字が含まれている場合は、正規表現を範囲全体に拡張できます。

#filtering forbidden control characters in the ASCII range
$ perl -pe's/[\x00-\x08\x0B-\x0C\x0E-\x1F]//g' <brokenfile.not-xml >fixedfile.still-not-xml

有効な XML 文字は次のとおりです。

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

ただし、元のファイルは XML ではないことに注意してください。また、使用しているライブラリが何であれ、エラーをスローして正しいことを行っていることに注意してください。

ファイルが表す (意図された) データによっては、制御コードを除外すると、そのデータの意味が変わる場合があります。

于 2013-03-28T19:23:32.410 に答える