1

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

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

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

无论如何,我可以正确解析此文档吗?

另外,我不知道,但所有浏览器似乎都很好地处理了这个问题,并且很好地呈现了页面。

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

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

4

1 回答 1

0

首先,浏览器看到的是:

莨夂、セ讎りヲ

text-indent: -9999px由于 CSS和覆盖在其上的背景图像,呈现的 html 中显示的内容并不相同。但它就在那里。删除它们将显示文本浏览器正在查看

开箱即用,解码为 Shift-Jis 应该会给你莨夂、セ讎りヲ?,但如果你想要与浏览器中相同的结果,你应该使用自定义CharsetDecoderwith IGNORE

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);

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

于 2013-01-17T09:11:04.673 回答