Java字符串字符集解析

Java字符串字符集解析,java,character-encoding,Java,Character Encoding,我正在使用JSOUPAPI解析一些网页。但是我在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 "

我正在使用JSOUPAPI解析一些网页。但是我在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)

我不是这方面的专家,但我相信您正在寻找的答案是:

我没有真正测试过,但在我需要使用类
org.w3c.tidy.tidy
将HTML转换为XML时,它对我非常有帮助。这会自动转换实体

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");
}
如果您愿意,还可以获取
文档的实例

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

有点像jtiy解决方案:命名实体,如
à在w3c.org的.dtd文件中定义,该文件维护HTML
这不是UTF-8到ASCII的转换。UTF-8≠ 命名字符实体。ASCII码≠ 数字字符引用。我只看到命名实体被数字实体替换-这是你真正需要的吗?我需要解析a到b。如果我把名字弄混了,我会很生气的。我尝试了3到4种不同的解决方案,但都没有效果。或者在SO编辑器中键入时有问题吗?也许您的初始数据显示了和actualá和actualç,您希望生成数字实体。但是没有未编码的文本。实际输入的字符编码是什么?我已经添加了您的
str1
。删除输入编码。并指定带有编号实体的输出。