Java String charset解析

时间:2012-05-22 16:51:37

标签: java character-encoding

我正在使用Jsoup API解析一些网页。但我得到1个字符集中的页面,并且必须将它们解析为其他

问题:如何将第1行解析为第2行?

String str1 = "Um grupo ligado à al-Qaeda assumiu o "
    + "ataque e ameaçou fazer outros.";

String str2 = "Um grupo ligado à al-Qaeda assumiu o "
    + "ataque e ameaçou fazer outros.";

//(The text above translate to some news about WTC)

3 个答案:

答案 0 :(得分:0)

我不是这方面的专家,但我相信你所寻求的答案是http://www.davidcraddock.net/tag/beautifulsoup/

答案 1 :(得分:0)

我还没有真正测试Jsoup,但当我需要使用类org.w3c.tidy.Tidy将HTML转换为XML时,JTidy对我非常有用。这会自动转换实体。

static String str1 = "Um grupo ligado à al-Qaeda assumiu o "
        + "ataque e ameaçou fazer outros.";

public static void main(String[] args) throws Exception {
    System.out.println(cleanData(str1));
}

private static String cleanData(String data) throws UnsupportedEncodingException {
    Tidy tidy = new Tidy();
    tidy.setNumEntities(true); // to num entities
    tidy.setPrintBodyOnly(true); // only print the content
    tidy.setWraplen(Integer.MAX_VALUE); // wrap
    ByteArrayInputStream inputStream = new ByteArrayInputStream(data.getBytes("UTF-8"));
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    tidy.parseDOM(inputStream, outputStream);
    return outputStream.toString("UTF-8");
}

如果愿意,您还可以获得Document的实例。

public org.w3c.dom.Document parseDOM(Reader in, Writer out)
public org.w3c.dom.Document parseDOM(InputStream in, OutputStream out)

答案 2 :(得分:0)

有点像JTidy解决方案:命名实体,如&agrave;,在w3c.org的.dtd文件中定义,维护HTML <!DOCTYPE ...。在本地复制它们并解析它们(简单)。然后,您可以立即用unicode字符串替换实体,或者创建数字实体。