1

当我解析一个包含 unicode/ASCII 元素的 HTML 页面时,我解决了一个奇怪的行为。这里以 git://gist.github.com/2995626.git 为例。

执行的是:

File layout = new File(html_file);
Document doc = Jsoup.parse(layout, "UTF-8");
System.out.println(doc.toString());

我期望的是 HTML 三角形,但它被转换为“â–¼”。你有什么建议吗?

提前致谢。

4

2 回答 2

1

Jsoup 完全能够使用 UTF-8 解析 HTML。更重要的是,它已经是它的默认字符编码。您的问题是在其他地方引起的。根据目前提供的信息,我可以看到两个可能的问题原因:

  1. HTML 文件最初不是使用 UTF-8 保存的(或者可能是之前的一步;它最初不是使用 UTF-8 读取的)。
  2. 标准输出(去哪里System.out)不使用 UTF-8。

如果您确保两者都设置正确,那么您的问题应该会消失。如果不是,那么根据您问题中迄今为止提供的信息,还有另一个可能的原因是不可猜测的。至少,这个博客应该带来很多新的见解:Unicode - How to get the characters right?

于 2012-07-01T04:16:45.163 回答
0

这是由unicode引起的问题。在这里,您可以有一个示例。您可以尝试下面的代码。结果将向您显示您编写的代码不起作用的原因。

public static void main(String[] argv) {

    String test = "Ch\u00e0o bu\u1ed5i s\u00e1ng";

    System.out.println(unicode2String(test));
}
/**
 * unicode 转字符串
 */
public static String unicode2String(String unicode) {

    StringBuffer string = new StringBuffer();

    String[] hex = unicode.split("\\\\u");
    string.append(hex[0]);
    for (int i = 1; i < hex.length; i++) {
        // 转换出每一个代码点
        int data = Integer.parseInt(hex[i], 16);

        // 追加成string
        string.append((char) data);
    }

    return string.toString();
}

也许你的代码应该如下:

System.out.println(unicode2String(doc.toString())); 
于 2016-06-23T10:58:07.450 回答