只要把ScraperConfiguration源码的输入源由inputSource改成inputStream,那么SAX 解析器将会自动检测编码。
public class InputSource
extends Object
XML 实体的单一输入源。
此模块(包括源代码和文档)在公共域中,同时 没有担保。有关更多信息,请参阅http://www.saxproject.org。
此类允许 SAX 应用程序封装有关单个对象中的输入源的信息,它可包括公共标识符、系统标识符、字节流(可能带有指定的编码)、基本 URI 和/ 或字符流。
在以下两种情况下应用程序可以将输入源提供给解析器:作为 Parser.parse 方法的参数,或者作为 EntityResolver.resolveEntity 方法的返回值。
SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入。如果有字符流可用,则解析器将直接读取该流,而忽略该流中找到的任何文本编码声明。如果没有字符流,但却有字节流,则解析器将使用该字节流,从而使 用在 InputSource 中指定的编码,或者另外(如果未指定编码)通过使用某种诸如 XML 规范 中的算法算法自动探测字符编码。如果既没有字符流,又没有字节流可用,则解析器将尝试打开到由系统标识符标识的资源的 URI 连接。
InputSource 对象属于该应用程序:SAX 解析器将不会以任何方式修改它(它可以在必要时修改副本)。但是,作为解析终止清除的一部分,对字节流和字符流的标准处理就是关闭这二者,因此在将此类流传递给解析器后应用程序不应尝试重新使用它们。
改进 InputSource 构造
InputSource inputSource = new InputSource(myInputStream); inputSource.setSystemId("http://www.oreilly.com"); inputSource.setEncoding("UTF-8");
|
使用了 setEncoding()
方法来通知 SAX 解析器使用何种编码;在涉及国际化或使用多字节字符集的 XML 应用程序中,这一点很重要。
但是,这里产生了另一个问题:对于字符编码,用手工设置字符编码的编码与所提供的输入流(通过 java.io.InputStream
或 java.io.Reader
)所用的编码 不同 ,这种情况很常见。如果这些编码不匹配,就可能发生各种解析问题。要避免这种情况,请始终用 Java InputStream
创建您的 InputSource
,而不要用 Reader
或 String
系统标识(这些都是 JAXP API 的可能选项)。当您提供 InputStream
时,SAX 实现将流封装在 InputStreamReader
中;然后 SAX 自动从流中检测正确的字符编码。随后,您可以省略 setEncoding()
步骤,再次减少方法调用。结果是应用程序运行更快了,并且字符编码始终正确。 使用 InputStream 向 SAX API 输入 XML 比将 Reader 用作输入明显更有效且更安全
转自:http://hi.baidu.com/yuweiming/blog/item/306a9e3df9e16e0fbaa1679d.html
更新:
package org.webharvest.definition;
public class ScraperConfiguration {...
public ScraperConfiguration(File sourceFile) throws FileNotFoundException {
this.sourceFile = sourceFile;
// InputSource inputSource = new InputSource(new FileReader(sourceFile));
InputSource inputSource = new InputSource(new FileInputStream(sourceFile));
inputSource.setEncoding("UTF-8");
createFromInputStream( inputSource );
}
分享到:
相关推荐
Maven发布Jar包中文乱码解决方法 Maven 是一个基于项目对象模型(Project Object...通过在 pom.xml 文件中添加配置、在 Maven 命令中添加参数、在资源文件中添加配置等方式,可以解决 Maven 发布 Jar 包中文乱码问题。
C#接收Json格式数据,中文出现乱码解决方法
二、乱码的解决方法 1. **确定编码格式**:首先,你需要确定原始文件的正确编码格式。可以使用诸如Notepad++、HexEdit等工具来查看文件的字节序列,从而推测其可能的编码。 2. **编码转换**:一旦确定了正确的编码...
Java避免UTF-8的csv文件打开中文出现乱码的方法 在Java中,避免UTF-8的csv文件打开中文出现乱码的方法是非常重要的。csv文件是 comma separated values 的缩写,常用于数据交换和导入导出操作。然而,在Java中读取...
Win10 软件出现乱码解决方法 Win10 软件出现乱码问题是许多用户在使用 Win10 系统时遇到的一个常见问题。这个问题的出现可能是由于系统设置或软件配置不当所致,导致软件界面文字出现乱码的情况。那么,如何解决 ...
### Android读取中文文件乱码解决方法 #### 一、问题背景 在开发Android应用时,经常需要处理中文字符或包含中文的文件。如果处理不当,可能会遇到中文乱码的问题,尤其是在读取本地文件或者从网络下载文件时更为...
配置 Web.xml 解决中文乱码问题 本文主要讨论了在 Web 开发中遇到的中文乱码问题,并提供了一些解决方案。...本文讨论了多种解决方案,并提供了一些配置文件的示例代码,希望能够帮助读者更好地解决中文乱码问题。
"SecureCRT中文乱码解决方法" SecureCRT 是一款功能...SecureCRT 中文乱码的问题可以通过简单的设置和修改 Linux 服务器的配置文件来解决。这两步操作可以确保 SecureCRT 正常地显示中文字符,提高工作效率和体验。
本文档将详细解释在Zabbix 3.4.6版本中如何进行中文汉化,以及在汉化过程中遇到乱码问题的解决方法。 首先,Zabbix默认是英文界面,如果需要汉化,可以在Zabbix的配置文件中指定语言。进入Zabbix的前端界面,在配置...
本文实例讲述了php使用fgetcsv读取csv文件出现乱码的解决方法。分享给大家供大家参考。具体分析如下: 一般来说在php中碰到乱码多半是编码问题,在这里我们实例分析了fgetcsv读取csv文件乱码原因所在与解决方法。 ...
本文将深入探讨在使用PL/SQL进行表导入(import table)以及通过LOAD语句加载外部文件时出现乱码的常见原因及解决方案。这不仅适用于Oracle数据库环境,也对其他支持类似功能的数据库系统有所启示。 ### 一、理解...
### Linux中文乱码解决方法 在使用Linux操作系统的过程中,用户可能会遇到中文显示出现乱码的情况。这种情况通常是由于系统编码设置不正确或者环境变量配置不当所导致的。本文将详细介绍如何解决Linux中的中文乱码...
Java和C++之间进行Socket通信时,可能会遇到乱码问题,主要是...总之,Java和C++通过Socket通信时,要确保双方对字符编码的一致性,避免出现乱码现象。在设计系统时,最好能统一编码标准,如都使用UTF-8,以简化处理。
路由器I交换机出现乱码的问题可以通过配置USB转串口驱动、选择正确的COM口、取消数据流量控制和更换USB转串口线等方法来解决。同时,我们还需要了解路由器的基本原理和工作机制,以便更好地解决问题。 在解决问题时...
日语乱码解决方法.txt
java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt...
本文提供了 Java 读取 TXT 文本文件乱码解决方案,并讨论了 TXT 文件的编码格式和获取编码格式的方法。 知识点: * Java 读取 TXT 文本文件时可能出现乱码的问题 *乱码的问题是由于文件的编码格式引起的 * 使用 ...
本篇文章将详细介绍如何解决Eclipse导出程序时出现的乱码问题,并提供相关知识点。 首先,我们需要理解编码的概念。在计算机中,字符与数字之间的映射关系被称为字符编码,常见的有ASCII、GBK、UTF-8等。如果在处理...
本文将详细讨论如何解决Log4j日志文件出现的乱码问题。 首先,我们要理解Log4j的工作原理。Log4j允许开发者自定义日志输出的方式,包括输出到控制台、文件、数据库等。它使用了`QuietWriter`类来写入日志,`...