使用JAXB避免XML输出中的特殊字符

时间:2014-08-17 06:57:29

标签: java xml jaxb

我正在阅读推文并形成一个XML,我正在使用JAXB Marshaller和UTF-8编码。

JAXB Marshaller设置为:

JAXBContext jaxbContext;
StringWriter writer = new StringWriter();

jaxbContext = JAXBContext.newInstance(obj.getClass());
Marshaller m = jaxbContext.createMarshaller();  
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(obj, writer);

此处,obj是我的类对象,其中包含推文文本和其他信息。

我的问题是,生成的XML包含特殊字符,如:

> x85, x93, xAQ

示例输出XML:

   <tweet>
        <id>500923859663872000</id>
        <createdAt>2014-08-17T14:05:29+05:30</createdAt>
        **<text>Ԁhughwizzy: 55% of all '14-'15 @PremierLeague players will wear @Nike** Boots. (@adidas 35%, @Puma 5%). http://t.co/VHit1Es7KlԠ@Yup_Yup9</text>
        <langISOCode>en</langISOCode>
        <place>NA</place>
        <favouriteCount>0</favouriteCount>
        <retweetCount>0</retweetCount>
        <isPossiblySensitive>false</isPossiblySensitive>
        <user>
            <id>39481349</id>
            <createdAt>2009-05-12T17:12:37+05:30</createdAt>
            <location>NA</location>
            <followersCount>281</followersCount>
            <listedCount>4</listedCount>
            <preferredLang>en</preferredLang>
            <isVerified>false</isVerified>
            <isTranslator>false</isTranslator>
        </user>
    </tweet>

我发现这些是UTF-8编码的字符,但它使我的XML无效。

有没有办法在生成的XML中避免使用这些字符。

1 个答案:

答案 0 :(得分:0)

在将字符串设置为对象中的变量之前,可以对其进行Base64Encode。如果要在浏览器中显示内容,可以提取该 text 的xml值,然后可以在对其解码后显示。

obj.setText(DatatypeConverter.printBase64Binary(byte[] your_tweet_as_a_byte_array));
// serialize it
//in the front end extract the xml value for your text using javascript. lets say xml contains like this:=>  <text>adiufgdb12bsre==<text>
// you can use the following code in the javascript to decode it.
atob(extracted_encoded _string) // will give you the decoded string.

使用这种方式,可以避免xml不支持的unicode字符,从而避免创建无效的xml。