如何在xml中转义<和≤符号?

11

我想在 Android 中创建一个字符串 <res>,如下所示:

<string name="bmi0">0: BMI≤18.5</string>
<string name="bmi1">1: 18.5<BMI≤24</string>
<string name="bmi2">2: 24<BMI≤27</string>

但是我看到了“标签起始未关闭”的错误。

我尝试在前面放一个\符号,但它没有起作用,还是显示了相同的错误。

<string name="bmi0">0: BMI\≤18.5</string>
<string name="bmi1">1: 18.5<BMI\≤24</string>
<string name="bmi2">2: 24<BMI\≤27</string>

如何转义XML中的特殊符号?


谢谢大家!!=D - user2301281
8个回答

17

您需要按照以下方式转义这些符号:

  • < 将变成 &lt;
  • > 将变成 &gt;

字符不需要转义。


这难道不完全忽略了“小于或等于”符号 ≤ 的使用重点吗? - unwind
@peter.petrov 啊,我猜测原帖中的错误只是因为使用了普通的<符号。 - unwind
1
我想我在这个问题上回答得比较早了 :) @kocko 这个 ≤ 实际上不是 < 吗?! - peter.petrov
当我使用 "&lt" 时,它显示 "未转义的 & 或非终止字符/实体引用" 错误。 - user2301281
2
您需要在其后添加一个冒号(;)。 - Konstantin Yovkov

3
正如所说,对于 <>,您可以使用以下内容:
<   &lt;
>   &gt;

您需要这样做是因为在XML中不允许使用<>,所以您需要转义它们。您可以通过输入:& + 特定的字符代码 + ;来进行转义,当您显示此字符串时,这将被识别为特殊字符(<>)。
您还想要小于或等于符号(≤),据我所知在XML中是允许的,所以只需使用即可。
以下是您需要转义的字符:
"   =   &quot;
'   =   &apos;
<   =   &lt;
>   =   &gt;
&   =   &amp;

3

2

仅供参考:guava 15引入了Escapers,特别是针对这种情况:

 Escaper escaper = XmlEscapers.xmlAttributeEscaper();
 String result = escaper.escape("<>");
 System.out.println(result); // &lt;&gt;

2
请使用以下内容:
<   &lt;
>   &gt;

1

1

使用Unicode

对于 < 使用 \u003c
对于 > 使用 \u003e
对于 使用 \u2264

要获取任意字符串的Unicode,请使用以下方法

public static String getUnicode(String input){
    String output = "";
    for(char c:input.toCharArray()){
        output +="\\u" + Integer.toHexString(c|0x10000).substring(1) ;
    }
    return output;
}

1
为什么要加1?\uxxxx不是用于XML的。 - Selvin
@Selvin 这是标记为 Android 的内容,在 strings.xml 中百分之百有效,而且这是处理某些特殊字符(如“非断连字符”)的唯一方法,甚至 LINT 也建议使用 \uXXXX(例如如果您键入“...”)。 - Lovis
1
确保唯一的方法是使用 XML 符号表示法 &#XXXX; 或 &#xHHHH;,例如 <?xml version="1.0" encoding="utf-8"?> <root><test name="&#8209;"/></root> - Selvin
@selvin 是的,你是对的(此外我刚刚看到,lint不再建议这样做了),但是,如果它不是针对XML的,为什么它还能正常工作呢? - Lovis
从源代码http://www.w3.org/TR/REC-xml/#dt-charref中可以看出,没有关于\u符号的单词。 - Selvin
我仍然不明白为什么这是“错误的”。它回答了问题并在Android中运行。(为什么?可能是因为字符串首先被解析,然后再进行翻译) - Lovis

1

为什么要加1?\uxxxx不是用于XML的。 - Selvin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接