使用flash出现中文乱码,发现是读取的配置文件未用utf-8格式保存xml文件,然后在网上查找了一下,发现下面这篇文章提出相同问题的解决方案,特转帖。
这几天开始学习dom4j,在网上找了篇文章就开干了,上手非常的快,但是发现了个问题就是无法以UTF-8保存xml文件,保存后再次读出的时候会报
“Invalid byte 2 of 2-byte UTF-8
sequence.”这样一个错误,检查发现由dom4j生成的这个文件,在使用可正确处理XML编码的任何的编辑器中中文成乱码,从记事本查看并不会出
现乱码会正确显示中文。让我很是头痛。试着使用GBK、gb2312编码来生成的xml文件却可以正常的被解析。因此怀疑的dom4j没有对utf-8编
码进行处理。便开始查看dom4j的原代码。终于发现的问题所在,是自己程序的问题。
在dom4j的范例和网上流行的《DOM4J 使用简介》这篇教程中新建一个xml文档的代码都类似如下
public void createXML(String fileName) {
document.nbspdoc = org.dom4j.document.elper.createdocument.);
Element root = doc.addElement("book");
root.addAttribute("name", "我的图书");
Element childTmp;
childTmp = root.addElement("price");
childTmp.setText("21.22");
Element writer = root.addElement("author");
writer.setText("李四");
writer.addAttribute("ID", "001");
try {
org.dom4j.io.XMLWriter xmlWriter = new org.dom4j.io.XMLWriter(
new FileWriter(fileName));
xmlWriter.write(doc);
xmlWriter.close();
}
catch (Exception e) {
System.out.println(e);
}
}
在上面的代码中输出使用的是FileWriter对象进行文件的输出。这就是不能正确进行文件编码的原因所在,java中由Writer类继承下来的子类
没有提供编码格式处理,所以dom4j也就无法对输出的文件进行正确的格式处理。这时候所保存的文件会以系统的默认编码对文件进行保存,在中文版的
window下java的默认的编码为GBK,也就是所虽然我们标识了要将xml保存为utf-8格式但实际上文件是以GBK格式来保存的,所以这也就是
为什么能够我们使用GBK、GB2312编码来生成xml文件能正确的被解析,而以UTF-8格式生成的文件不能被xml解析器所解析的原因。
好了现在我们找到了原因所在了,我们来找解决办法吧。首先我们看看dom4j是如何实现编码处理的
public XMLWriter(OutputStream out) throws UnsupportedEncodingException {
//System.out.println("In OutputStream");
this.format = DEFAULT_FORMAT;
this.writer = createWriter(out, format.getEncoding());
this.autoFlush = true;
namespaceStack.push(Namespace.NO_NAMESPACE);
}
public XMLWriter(OutputStream out, OutputFormat format) throws UnsupportedEncodingException {
//System.out.println("In OutputStream,OutputFormat");
this.format = format;
this.writer = createWriter(out, format.getEncoding());
this.autoFlush = true;
namespaceStack.push(Namespace.NO_NAMESPACE);
}
/**
* Get an OutputStreamWriter, use preferred encoding.
*/
protected Writer createWriter(OutputStream outStream, String encoding) throws UnsupportedEncodingException {
return new BufferedWriter(
new OutputStreamWriter( outStream, encoding )
);
}
由上面的代码我们可以看出dom4j对编码并没有进行什么很复杂的处理,完全通过java本身的功能来完成。所以我们在使用dom4j的来生成我们的
XML文件时不应该直接为在构建XMLWriter时,不应该直接为其赋一个Writer对象,而应该通过一个OutputStream的子类对象来构
建。也就是说在我们上面的代码中,不应该用FileWriter对象来构建xml文档,而应该使用FileOutputStream对象来构建所以将代码
修改入下:
public void createXML(String fileName) {
document.nbspdoc = org.dom4j.document.elper.createdocument.);
Element root = doc.addElement("book");
root.addAttribute("name", "我的图书");
Element childTmp;
childTmp = root.addElement("price");
childTmp.setText("21.22");
Element writer = root.addElement("author");
writer.setText("李四");
writer.addAttribute("ID", "001");
try {
//注意这里的修改
org.dom4j.io.XMLWriter xmlWriter = new org.dom4j.io.XMLWriter(
new FileOutputStream(fileName));
xmlWriter.write(doc);
xmlWriter.close();
}
catch (Exception e) {
System.out.println(e);
}
}
分享到:
相关推荐
标题中的“论坛转帖工具.rar”表明这是一个用于在论坛之间转移帖子的软件工具,通常用于帮助用户方便地将一个论坛的帖子内容复制到另一个论坛,可能是为了分享信息、讨论或保存重要的帖子。这类工具可能包括自动抓取...
它允许用户快速地将一篇帖子从一个贴吧复制并发布到另一个贴吧,无需手动复制粘贴文字和图片。这一特性对于那些希望分享有价值信息或者在多个贴吧同步维护内容的用户来说,非常实用。转帖过程中,工具通常会自动保留...
UBB论坛转帖圣手.exeUBB论坛转帖圣手.exe
【标题】:“用C# Generator解决Hanoi塔问题”揭示了如何使用C#编程语言来构建一个自动化生成器,以高效地处理经典的汉诺塔问题。汉诺塔问题是一个著名的递归问题,它涉及到将一组盘子从一根柱子移动到另一根柱子,...
本资源包含10个不同设计风格的网站Banner的FLA源文件,对于学习和理解Flash动画及网页设计的朋友们来说,这是一个宝贵的资料库。 首先,让我们了解什么是FLA源文件。FLA(Flash Authoring)是Adobe Flash ...
老的解决办法:将项目文件都设为utf-8编码,然后一个一个的文件用Ultraedit打开,粘贴到eclipse里面,在保存。这种办法最笨,最累,但没有发现其它好办法的时候,也只能干体力活了。毕竟,结果才是最重要的。 发现此...
标题和描述中的“世界编程大赛第一名写的程序”这一知识点,实际上指向了计算机科学与编程竞赛领域的一个重要概念:即在高水平的编程比赛中,优胜者所编写的代码往往蕴含着高级算法、数据结构以及编程技巧。...
因此,培养良好的沟通能力是每个IT从业者都应重视的能力之一。 ### 三、领导力与管理 作者提到的Pete作为一位优秀的领导者,对团队成员的成长起到了关键作用。在IT行业中,无论是作为项目经理还是技术经理,都需要...
这是为了让系统能够识别和调用这两个文件,以便实现一键转帖的功能。 2. **插入代码**:在内容页的适当位置,需要添加HTML.TXT文件中的代码。这通常是在文章内容下方或者侧边栏等显眼位置,以方便用户快速找到并...
本篇文章将详细探讨“编辑人员转帖去水印工具”,并介绍如何使用名为Teorex Inpaint的1.0.0.2版本的软件来实现这一目标。 首先,我们要理解什么是水印。水印通常是指在图像或视频中添加的半透明标记,它可以是文字...
总的来说,"转帖工具插件 for PHPwind 7.5 正式版" 提供了一个高效且用户友好的解决方案,帮助管理者优化论坛内容的组织和管理,同时降低了操作复杂度,提升了用户体验。正确理解和使用这款插件,能有效提升 PHPwind...
总之,Html2UBBMaxcj_Softii论坛专用转帖工具是一个实用的工具,解决了HTML内容在特定论坛环境下无法正常显示的问题,极大地提高了用户在论坛交流的体验。通过了解和熟练使用这款工具,用户可以更轻松地分享和讨论...
X2转帖工具、采集工具”是针对这个平台设计的辅助软件,主要用于帮助论坛管理员或用户批量发布帖子和采集内容,提高论坛内容更新的效率。 一、批量发帖功能 1. 自动化发布:此工具可以自动化地创建和发布帖子,...
1. 单例模式(Singleton):确保一个类只有一个实例,并提供全局访问点。 2. 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。 3. 抽象工厂模式(Abstract Factory):提供...
"一键转帖功能插件 for 帝国CMS v1.0.rar" 是一个专为帝国CMS设计的扩展工具,其主要目标是简化用户在网站上分享内容的过程,提高用户体验。这个插件允许用户轻松地将网站上的文章或信息复制并转发到其他平台,如...
4. **Flex 构建工具**: Adobe Flash Builder(以前称为Flex Builder)是一个基于Eclipse的IDE,提供了图形化的界面设计工具、代码编辑器和调试器,简化了Flex应用的开发流程。 5. **Flex 组件**: Flex 提供了一个...
2.新增批量替换关键词(原来是单个词语替换,可以利用这个功能删除一些网站的防转帖代码) 3.批量随机新增文字(新增内容可自定义,从而实现伪原创) 4.cookie记录替换和新增关键词(避免每次打开转帖工具都要输入繁琐的...