我有一些看起来像这样的Java代码:
String xml = "<string>" + escapeXml(input) + "</string>";
protected String escapeXml(String input) {
return input.replaceAll("&", "&")
.replaceAll("'", "'")
.replaceAll("\"", """)
.replaceAll("<", "<")
.replaceAll(">", ">")
}
input
是一个可变的UTF-8编码字符串。
我发现的是,在某些情况下,xml
字符串最终等于<string>
而不包含</string>
。为什么会这样? Java是否有可能将escapeXml
评估为在</string>
附加到字符串之前截断字符串的内容?
更新:为了回应Sotirios,请允许我补充一些说明。 xml
字符串正在保存到SQLite数据库列,而该数据库列又由另一个实用程序解析。到目前为止,我注意到当保存到数据库的xml
字符串是<string>
或<string>
之后带有一些非ASCII Unicode字符时,就会出现这种情况。
input
自动从钩子进入Android功能。因为一切都在Android上以非标准配置运行,所以调试有点难以准确了解正在发生的事情。我希望可能有一些涉及Java字符串的明显答案。
答案 0 :(得分:0)
我从来没有深究这一点,但我通过修改escapeXml
函数来使用正确的XML编码器(org.apache.commons.lang库)来解决我的问题。我不知道这会产生什么影响,但确实如此,现在xml
字符串已正确构建。