我们来看写文件时用到的XMLWriter,他提供以下几种构造方法:
XMLWriter()
XMLWriter(OutputFormat format)
XMLWriter(OutputStream out)
XMLWriter(OutputStream out, OutputFormat format)
XMLWriter(Writer writer)
XMLWriter(Writer writer, OutputFormat format)
最简单常用的可能是new XMLWriter(new FileWriter(...))这样的形式。
可如果你一旦这么用,就会造成编码问题。
由于dom4j对于文件编码的选择是才用java本身类的处理方式(可以从源码看到),
这么写就是采用FileWriter的处理方式,
而FileWriter是不提供对编码的处理的。于是会调用系统自身的编码,比如用中文操作系统,
编码方式就是gbk,然后默认的,他赫然会在文件头写上
<!--l version="1.0" encoding="UTF-8-->
也就是说,他以当前操作系统的编码保存文件,并且竟然自动添加文件头为"utf-8"格式,
这会导致很多程序无法读取正确编码,而且具有很差的移植性(比如在windows下开发,
放到linux服务器下跑,毕竟一般linux服务器默认local都是utf-8)。
解决途径一:使用new XMLWriter(new FileOutputStream(...))方法。这样做,
因为dom4j默认使用utf-8编码,即xml文件头
默认编码方式,并且内容也会使用utf-8保存,这样可以做到一致的编码,不会出问题。
解决途径二:使用new XMLWriter(new FileOutputStream(...), outputFormat)的构造方法。
OutputFormat xmlFormat = OutputFormat.createPrettyPrint();
xmlFormat.setEncoding("utf-8");
XmLWriter writer = new XMLWriter(new FileOutputStream(...), xmlFormat);
writer.write(document);
writer.close(); 如上,setEncoding可以设置存储的文件编码格式,createPrettyPrint是
得到美化xml格式输出。这样的话,在不同的环境下可以获得同样的编码读写,并且真正保证了
文件标称与实际编码的一致性。
【注意】如果你使用OutputFormat是为了设置文件编码,那千万别用
XMLWriter(new FileWriter(...),outputFormat)构造方法,因为前面已经说了,
FileWriter不会处理编码,所以即使你使用format.setEncoding("utf-8");他仍然不会使用
utf-8编码,而只是把文件头指定为utf-8,这类似不使用outputFormat的情况。
而网上好多人举例用了
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
那是因为他们format.setEncoding("gbk");而windows默认就是gbk,这当然使实际编码与
标称的配套了。但实际上,这种方法是不正确的,java并没有按你写的"gbk"进行编码,而是
使用了系统默认编码而已,放到linux就会出现错误,所以一定的小心。 把编码交给操作系统
来控制一向是罪恶的,包括java其他地方的参数传递等,如request的参数传递,其他文件读
写,如果不使用编码过滤器,不进行编码指定,可能使得整个系统失去移植性,并产生完全不
可预期的错误。找起来头大不说,有时候看到encoding="UTF-8",实际上却是gkb编码会让
你错过关键调试点。还有就是记事本的罪恶性,用记事本打开不同编码的文件,往往得不到预
期的效果,而且你无从得知他到底是用何种编码打开,一般使用EditPlus指定编码打开会好很
多。希望对你有帮助!
分享到:
相关推荐
此外,确保输入和输出的中文字符串也是UTF-8编码,避免乱码问题。 在使用“xmlwriter中文版”时,可能需要注意的点是它是否包含了中文的示例代码、文档说明,以及是否对处理中文字符有任何特别优化。如果`HB_XML...
2. **创建XmlWriter实例**:使用`XmlWriter.Create()`方法创建`XmlWriter`实例。你需要提供一个输出流或文本写入器,以及可选的`XmlWriterSettings`对象来配置写入行为,例如编码、新行处理、缩进等。 3. **XML文档...
`xmlWriter`是一个功能强大的XML文档生成工具,它允许以流的方式创建XML文档,这在处理大量数据时尤其有用。与`xmlReader`相似,`xmlWriter`也采用了基于事件的机制,使得开发者能够更细粒度地控制文档的生成过程。 ...
XML Writer是一款专为开发者和初学者设计的XML编辑工具,主要功能是帮助用户方便地创建、编辑和格式化XML文档。XML(可扩展标记语言)是一种结构化数据表示语言,广泛应用于数据交换、配置文件、软件开发等多个领域...
XMLwriter有一个直观性、个性化的用户界面让使用者编辑,还具有书签功能,自动查找并替代。其他的功能还有 XML在线帮助、插件管理、即时色彩编码转换、树型结构查看、批量及命令行处理、可扩充的能力及更多开发功能...
XMLwriter 有一个直觉性、个人化的使用者介面让使用者编辑又有书签功能,自动找寻并取代。额外的功能还包含 XML 线上求助,物件管理、即时色彩编码转换,树状结构查看、批次及命令次处理、可扩充的能力及相关功能。...
3. 编码控制:XMLwriter支持多种字符编码,如UTF-8、ISO-8859-1等,确保XML文档的正确编码和解码。 4. 格式化输出:可以设置缩进、换行等格式选项,使生成的XML易于阅读和理解。 5. 层次结构:XMLwriter能够方便地...
10. **文档格式和编码**:XMLWriter允许指定输出的编码(如UTF-8、ISO-8859-1等),以及换行符(如'\n'、'\r\n'等)。正确设置这些选项可以确保生成的XML文档符合预期的格式和规范。 在实际应用中,XMLWriter可以...
4. **编码支持**:对于多语言环境,XMLwriter27支持各种字符编码,如UTF-8、GBK等,确保在处理中文字符时不会出现乱码问题。 5. **集成开发环境**:XMLwriter可能包含一些基本的IDE(集成开发环境)特性,如代码...
XMLwriter XMLwriter 应用平台: Win9x/NT/2000/XP/2003 ... XMLWriter 2.6 较适合于初学者,她有着类似于EditPlus等编辑工具的界面,而且由Fly脱壳破解后的程序运行稳定,编辑XML文档时没有出现任何问题。
XMLwriter 2是一款高效、强大的XML处理工具,与AltovaXMLSpy相比,它在某些方面提供了更为便捷和灵活的XML文档创建与编辑功能。本文将深入探讨XMLwriter 2的相关知识点,包括其特点、功能、使用场景以及与XMLSpy的...
可以在 Windows 环境下支援 XML、XSL、DTD、CSS、HTML 及文字格式的档案,一个整合性的预览视窗让你格式化你的 XML 文件,只要使用 CSS、XSL 语言即可,还包含 XML 线上求助,物件管理、即时色彩编码转换,...
5. **设置XmlWriter的输出格式和编码** 要控制XML的输出格式,如缩进、换行符和编码,需要使用`XmlWriterSettings`类。例如,要设置为UTF-8编码,缩进和换行符,可以这样做: ```csharp XmlWriterSettings ...
通过这种方式,我们可以确保DOM4J生成的XML文件采用正确的字符编码,避免了可能出现的乱码问题。同时,这也提醒我们在使用任何处理文本输出的API时,都要注意指定正确的编码,以保证跨平台和多语言环境下的兼容性。 ...
XMLWriter通过提供简单的API,让开发者可以方便地构建复杂的XML结构,而无需关心底层的XML编码细节。在实际项目中,根据需求,可能还需要对XML数据进行序列化和反序列化,或者结合其他库如GDataXMLNode来处理更复杂...
XmlTextWriter xmlWriter = new XmlTextWriter(filePath, Encoding.Default); // 设置缩进格式 xmlWriter.Formatting = Formatting.Indented; // 开始写入文档 xmlWriter.WriteStartDocument(); xmlWriter....
使用XMLWriter可以高效地构建大型或者复杂的XML文档。而XMLReader是一个用于读取XML文档的流式阅读器,它可以逐个节点地解析XML,而不需要将整个文档加载到内存中,特别适合于处理大型XML文件。下面详细讲解PHP使用...
1. XMLWriter的基本使用: - 首先创建XMLWriter的实例。 - 通过openUri方法设置输出目标,可以是文件或输出流。 - 调用setIndent方法设置是否缩进输出的XML,以及缩进字符的长度。 - 使用startDocument方法创建...
output = new XMLWriter(new FileOutputStream("entity.xml"), format); output.write(document); output.close(); } catch (IOException e) { e.printStackTrace(); } ``` 在上面的代码中,我们使用 `...
标题中的“dom4j 写UTF-8的xml乱码问题 使用FileOutputStream”涉及的是在使用Java编程语言处理XML文件时遇到的编码问题。DOM4J是一个强大的Java库,用于处理XML、XPath和XSLT,它提供了丰富的API来读取、写入、修改...