遇到这一方面的问题是因为我试图把一个对象序列化之后存贮到xml文件中,然后从xml文件中读取字符串,并反序列化对象(hadoop mapreduce程序中通过JobConf向tasktracker传送对象)。有关序列化:
当我把序列化之后的数据直接存在xml中后,在解析xml时遇到解析错误,原因是有非法字符。在详细阅读xml的说明之后才发现:< > ' " &是不允许作为xml的PCDATA的。要使用这几个字符,必须要把他们替换为内建实体:
实体引用 字符
< <
> >
& &
" "
' '
所以,最直接的方法就是自己控制,在写入xml文件时把特殊字符转为实体引用,在读取的时候,再转回来。当然还有另外一个方法就是不把字符串当PCDATA,而是当成CDATA来使用(没有测试)。
用实体引用的方法太麻烦,而我的应用xml的格式不能自己规定,所以只好寻找另外的方法:BASE64编码。这是一种常用在网络传输数据的编码方式。把存在这些非法字符的字符编码成base64编码,就不会有这些字符了。最重要的是java api中提供了这种编码的编码器和解码器,位于sun.misc的BASE64Encoder和BASE64Decoder。这样就可以把序列化之后得到的字节流转化成字符串了。并且也可以存贮在xml文件中。
不过这两个类并不是sun的开放api,编译会有警告。
分享到:
相关推荐
XML(eXtensible Markup ...总结来说,理解并正确处理XML特殊字符是XML编程中的基础,也是保证数据正确传输和解析的关键。不论是手动编写XML文档,还是通过编程语言操作XML,都应确保特殊字符被适当地转义或编码。
在XML(可扩展标记语言)中,特殊字符的处理是一项重要的技术细节,它直接关系到文档的正确解析和展示。由于XML是一种用于标记文本的元语言,它使用一系列的规则来定义数据结构和数据类型,因此,对于XML文档中可能...
CDATA(Character Data)是XML中的一种特殊语法,用于表示一段纯文本,其中的XML特殊字符(如", ">", "&")不需要转义。在XML中,可以使用`<![CDATA[ ... ]]>`来创建CDATA段。当处理包含大量特殊字符的数据时,使用...
### XML特殊字符转义 1. `转义为 `<` 2. `>` 转义为 `>` 3. `&` 转义为 `&` 4. `'` 转义为 `'` 5. `"` 转义为 `"` 例如,如果你的XML数据中包含字符串 `"It's a <good> day!"`,你应该将其...
在C#中,处理XML字符串时,由于XML的语法规则,某些特殊字符不能直接出现在XML文档中,否则会导致解析错误。这些特殊字符包括小于号 `、大于号 `>`、和与号 `&`。此外,对于XML属性值,单引号 `'` 和双引号 `"` 也...
在MyBatis中,XML配置文件常常用于定义SQL语句,但XML本身是一种结构化语言,对于某些特殊字符,如 `, `>`, `&` 等,XML解析器会将其视为标签或实体引用,这可能导致解析错误。因此,我们需要正确处理这些特殊字符以...
// 下面的是通过解析xml字符串的 doc = DocumentHelper.parseText(xml); // 将字符串转为XML Element rootElt = doc.getRootElement(); // 获取根节点 System.out.println("根节点:"+ rootElt.getName()); // ...
当遇到包含特殊字符如 "和 "&" 的文本时,XML解析器可能会产生错误,因为这些字符在XML语法中有特定含义。为了解决这个问题,我们可以使用CDATA(Character Data)段来封装这些文本,使得XML解析器将其视为纯文本...
由于XML是一种标记语言,它对某些字符有特定的规定,如果直接将这些特殊字符写入XML文件,则可能会导致解析错误或出现非预期的结果。因此,在XML文件中使用特殊字符时,需要采用转义字符来替代。 #### 特殊字符与...
每个子目录下的`string.xml`文件应具有相同的`name`属性,以便Android系统根据用户的语言设置自动选择相应的字符串资源。如果没有找到特定语言的字符串资源,系统会回退到默认的`values`目录下的资源。 2. **定义...
然而,在XML中直接使用一些特殊字符,比如大于(>)、小于(<)、等于(=)、单引号(')和双引号(")等,可能会导致XML解析错误,因为这些字符在XML文档中有特定的含义。为了解决这个问题,Mybatis提供了一些处理...
XStream是一个强大的Java库,它允许开发者方便地将Java对象序列化为XML,同时也能将XML数据反序列化回对应的Java对象。这个过程对于数据存储、网络传输或者XML配置文件的处理非常有用。在处理多个同名子节点以及节点...
在IT领域,尤其是在数据库操作与编程中,对特殊字符的处理是至关重要的。特殊字符,如方括号、单引号、百分号、下划线和脱字号等,在SQL语句中有特定的意义,若不正确处理,可能会导致SQL语法错误或注入攻击。本文将...
- 如上述代码所示,可以编写一个函数`covert_xml_special_char`来处理这些特殊字符。这个函数通过Python的字符串`replace`方法,将这些特殊字符替换为它们对应的实体引用。 - `&` 用于转义 `&` - `"` ...
特别是在使用类似`LIKE`这样的操作符时,如果用户输入的数据中含有`%`、`_`或`#`等特殊字符,那么这些字符可能会被SQL解释器误认为是通配符或者特殊符号,导致查询结果不符合预期。本文将详细介绍如何在ibatis框架下...
在Java编程中,数据结构与XML(eXtensible Markup Language)之间的转换是常见的操作,尤其是在处理数据交换或存储时。...在进行这样的转换时,确保处理好异常、空值和特殊字符,以确保数据的完整性和安全性。
2. **处理XML特殊字符**:XML中的`、`>`、`&`等字符有特殊含义,需要转义。在使用`sed`时,需要确保这些字符不会干扰到正则表达式的解析。例如,使用`\>`来匹配实际的`>`字符。 3. **行内与行间匹配**:由于`sed`...
在SVG文档中,特殊字符用于表示非ASCII码范围内的字符,如版权符号、引号、货币符号等。这些字符无法通过普通的键盘输入,但在HTML或SVG中,可以使用实体引用(entity reference)或数值引用(numeric character ...
XML还提供了一种特殊的数据区域——CDATA区,用于包含不会被解析器处理的文本数据,通常用于包含可能包含XML特殊字符的脚本或样式代码。需要注意的是,CDATA区内不能嵌套其他CDATA,且只能作为元素内容,不能作为...