Java:当字符串包含空字符时,如何输出字符串?

Java:当字符串包含空字符时,如何输出字符串?,java,string,Java,String,我的代码使用XMLwriter和XMLObjectOutputStream来处理字符串 关键是字符串可能包含字符零(\0)。如果我使用string.replace(“\0”和“”)则不会报告任何错误。 如果不使用string.replace(“\0”和“”),它将报告“输出中不允许使用零字符” 但是,我需要保留原始字符串,以便在输出到txt文件时使用它。在这种情况下,如何处理字符串以保留\0并同时使用XMLwriter 字符串如下所示: NULNULSTX &The story of

我的代码使用XMLwriter和XMLObjectOutputStream来处理字符串

关键是字符串可能包含字符零(\0)。如果我使用
string.replace(“\0”和“”)
则不会报告任何错误。 如果不使用
string.replace(“\0”和“”)
,它将报告“输出中不允许使用零字符”

但是,我需要保留原始字符串,以便在输出到txt文件时使用它。在这种情况下,如何处理字符串以保留\0并同时使用XMLwriter

字符串如下所示:

 NULNULSTX &The story of Florida 
(在Notpad++中打开显示NUL,在txt中打开仅在NUL中显示空格)

以下是错误信息:

ERROR (SelectorManager.run):  java.lang.IllegalStateException: character zero is not allowed in output
at org.xmlpull.mxp1_serializer.MXSerializer.writeAttributeValue(MXSerializer.java:849)
at org.xmlpull.mxp1_serializer.MXSerializer.attribute(MXSerializer.java:624)
此外,如果字符串无法从null terminate中转义,我们是否可以找到另一种方法来替换字符串(例如char、array…)以输出原始信息?

与其将“\0”替换为空字符串,不如尝试使用转义字符来转义它:

string.replace("\0", "\\0")

我找到了解决方案,似乎我们可以在java.commons.lang3中使用StringEscapeUtils

StringEscapeUtils.escapeJava(javaString)
StringEscapeUtils.unescapeJava(StringEscapeUtils.escapeJava(javaString)

它可以在不违反XML要求的情况下对字符串进行编码。

将字符串输出到txt文件后,将在字符串中显示\0,该值与原始值不同(null)。关键是需要保持sting与以前一样…正如@CoronA评论的那样,用一个例子来说明哪个字符串失败,以及您希望该字符串的输出是什么,会更容易一些。我编辑了原始文本,请查看详细信息。谢谢如果您只需要可读,为什么不将“\0”替换为“NUL”?您丢失了实际字符,但文本在任何编辑器中都是相同的。关键是字符串需要与以前一样保留,并将在下一步中用于执行某些操作…因此我不能用nul替换\0…文本中的
是否存在相同的问题?那么你的问题是逃跑。您必须转义字符串才能与xml兼容。我对没有问题,只有空字符会让我感到困惑。现在似乎需要找到一种方法来保持字符串中的空字符,或者使用其他格式来存储上下文?也许这解释了原因:。您是否尝试将其放入CDATA区域。请发布一个失败的简单代码示例。如果可以直接在您使用的代码上进行测试,则更容易检查答案的有效性。