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

Encoding 在单个文件中处理多个编码,encoding,xml-parsing,html-parsing,Encoding,Xml Parsing,Html Parsing,我遇到了一些奇怪的编码问题。我需要从web解析一个HTML文档,并使用“Content Type”字符集元数据来确定编码类型。 有一个页面给我带来了麻烦,它是用“Shift_jis”(日语)编码的——解析器的结果包含一些乱码 当我使用UTF-8解析同一个文档时,以前被乱码的字符被正确解析,但其他所有字符现在都被乱码了 我假设文档包含两种不同编码类型的文本 我能正确解析这个文档吗 另外,我不知道怎么做,但是所有的浏览器似乎都很好地处理了这个问题,并且很好地呈现了页面 如果您能想到这一点,我将不胜感

我遇到了一些奇怪的编码问题。我需要从web解析一个HTML文档,并使用“Content Type”字符集元数据来确定编码类型。 有一个页面给我带来了麻烦,它是用“Shift_jis”(日语)编码的——解析器的结果包含一些乱码

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

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

我能正确解析这个文档吗

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

如果您能想到这一点,我将不胜感激


我需要解析的页面:

首先,浏览器看到的是:

莨夂、セ讎りヲ
呈现的html中显示的内容不同,因为CSS
文本缩进:-9999px
和。但它就在那里

开箱即用,作为Shift-Jis解码应该给您提供
莨夂、セ讎りヲ?
,但如果希望得到与浏览器中相同的结果,则应将自定义的
字符集解码器
忽略

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

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

字符集声明只是撒谎,页面处于shift jis中。99%的文本使用shift jis正确解析。1%是用utf-8正确解析的,所以两个声明都是谎言(而不是谎言)。我在itI上使用shift jis没有问题。我正在运行以下代码:URL URL=new URL(“);String String=IOUtils.toString(URL.openStream(),“shift_jis”);标记“target=“\u blank”class=“company”>”后面是乱码。我有
莨夂、セ讎りヲ?在该标记之后,当解码为shift jis时