我正在阅读推文并形成一个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中避免使用这些字符。
答案 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。