我知道在所有情况下我都需要转义:
quot "
amp &
apos '
lt <
gt >
但是有口音的国际字符,或者给一对夫妇命名的俄罗斯字符呢?当我的编码指令设置为UTF-8时,我需要转义这种类型的字符吗?
如果我将编码指令设置为ASCII会怎么样?我还需要转义所有这些字符吗?
这是我尝试使用Nokogiri(lib2xml)复制的XML示例(来自遗留系统):
<?xml version="1.0" encoding="UTF-8"?>
<DESCRIPTION lang="rus">
<SHORT_DESCRIPTION>МОДУЛЬ- ELECTRONIC OUTPUT 120 V DC 5 mA</SHORT_DESCRIPTION>
<LONG_DESCRIPTION>МОДУЛЬ- ТИП ELECTRONIC OUTPUT ВХОД 120 V DC ВЫХОД 5 mA ИСТОЧНИК ПИТАНИЯ 120 V DC ДОПОЛНИТЕЛЬНАЯ ДЕТАЛЬ 1 ANALOG SM322-8S TOR</LONG_DESCRIPTION>
</DESCRIPTION>
您可以看到示例中的指令显示UTF-8,但是它们转义了很多字符,Nokogiri只在指定ASCII编码指令时转义这些字符。这就是我困惑的地方。
编辑2:如果我不向Nokogiri传递编码指令,生成的XML将保留所有俄罗斯字符的原生西里尔字母,但这与我需要复制的XML不一致。
只需要在以下情况下使用字符引用来表示字符:
- 在当前上下文中具有特殊意义(所以您列出的五个字符有时只需要编码)
- 在字符编码中不存在,文件被编码为
ASCII没有很多字符,所以如果你用ASCII编码你的XML,你将不得不为许多字符使用字符引用。
不要用ASCII编码XML。XML的默认编码是UTF-8,它得到很好的支持。