在单个文件中处理多个编码

时间:2013-01-16 17:41:25

标签: encoding xml-parsing html-parsing

我遇到了一些奇怪的编码问题。我需要从Web解析HTML文档,我正在使用'Content-Type'字符集元数据来确定编码类型。 一页给我带来麻烦,并由'Shift_jis'(日语)编码 - 解析器结果包含一些乱码。

当我使用UTF-8解析同一个文档时,之前出现乱码的字符会被正确解析,但其他所有字符现在都会出现乱码。

我假设文档包含两种不同编码类型的文本。

无论如何,我可以正确地解析这个文件吗?

此外,我不知道如何,但所有的浏览器似乎都很好地解决了这个问题并且很好地展示了这个页面。

非常感谢对此的任何想法。

我需要解析的页面:http://ao.recruit.co.jp/form.html

1 个答案:

答案 0 :(得分:0)

首先,浏览器看到的是:

莨夂、セ讎りヲ

由于CSS text-indent: -9999pxbackground image laid over it,渲染的html中显示的内容不一样。但它就在那里。 Removing them will show the text browser is seeing

开箱即用,解码为Shift-Jis应该会为您提供莨夂、セ讎りヲ?,但如果您想要与浏览器中的结果相同,则应使用CharsetDecoderIGNORE的自定义URL url = new URL( "http://ao.recruit.co.jp/form.html"); BufferedInputStream bis = new BufferedInputStream(url.openStream()); CharsetDecoder decoder = Charset.forName("Shift-Jis").newDecoder(); decoder.onMalformedInput(CodingErrorAction.IGNORE); decoder.onUnmappableCharacter(CodingErrorAction.IGNORE); Reader inputReader = new InputStreamReader(bis, decoder); String result = IOUtils.toString(inputReader); System.out.print(result);

{{1}}

这将为您提供与浏览器相同的结果。当然,它不会解析图像文件中的文本。