2

すべての場合にこれらをエスケープする必要があることはわかっています。

quot  "
amp   &
apos  '
lt    <
gt    >

しかし、アクセントのある国際的な文字やロシア語の文字についてはどうでしょうか。エンコーディング命令が UTF-8 に設定されている場合、このタイプの文字をエスケープする必要がありますか?

エンコード命令を ASCII に設定するとどうなりますか? それらすべての文字もエスケープする必要がありますか?

これは、Nokogiri(lib2xml) を使用して再現しようとしている (レガシー システムからの) XML のサンプルです。

<?xml version="1.0" encoding="UTF-8"?>
  <DESCRIPTION lang="rus">
    <SHORT_DESCRIPTION>&#1052;&#1054;&#1044;&#1059;&#1051;&#1068;- ELECTRONIC  OUTPUT 120 V DC 5 mA</SHORT_DESCRIPTION>
    <LONG_DESCRIPTION>&#1052;&#1054;&#1044;&#1059;&#1051;&#1068;- &#1058;&#1048;&#1055; ELECTRONIC  OUTPUT &#1042;&#1061;&#1054;&#1044; 120 V DC &#1042;&#1067;&#1061;&#1054;&#1044; 5 mA &#1048;&#1057;&#1058;&#1054;&#1063;&#1053;&#1048;&#1050; &#1055;&#1048;&#1058;&#1040;&#1053;&#1048;&#1071; 120 V DC &#1044;&#1054;&#1055;&#1054;&#1051;&#1053;&#1048;&#1058;&#1045;&#1051;&#1068;&#1053;&#1040;&#1071; &#1044;&#1045;&#1058;&#1040;&#1051;&#1068; 1 ANALOG SM322-8S TOR</LONG_DESCRIPTION>
 </DESCRIPTION>

サンプルの命令には UTF-8 と書かれていますが、多くの文字がエスケープされていることがわかります。この文字は、ASCII エンコーディング命令を指定した場合にのみエスケープされます。これが私を混乱させているものです。

編集 2: Nokogiri にエンコーディング命令を渡さない場合、結果の XML はすべてのロシア語文字をネイティブのキリル文字のままにしますが、複製する必要がある XML とは一致しません。

4

1 に答える 1

2

次のいずれかの場合にのみ、文字参照で文字を表す必要があります。

  • 現在のコンテキストでは特別な意味を持ちます(したがって、リストした5文字は時々エンコードするだけで済みます)
  • ファイルがエンコードされている文字エンコーディングには存在しません

ASCII には多くの文字が含まれていないため、XML を ASCII でエンコードした場合、多くの文字に対して文字参照を使用する必要があります。

XML を ASCII でエンコードしないでください。XML のデフォルトのエンコーディングは UTF-8 で、これは十分にサポートされています。

于 2013-01-11T20:38:21.707 に答える