Java 使用Jsoup解析HTML文档时松开unicode/ASCII元素

Java 使用Jsoup解析HTML文档时松开unicode/ASCII元素,java,character-encoding,jsoup,Java,Character Encoding,Jsoup,在解析包含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三角形,但它被转换为“–¼”。你有什么建议吗 提前感谢。Jsoup

在解析包含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三角形,但它被转换为“–¼”。你有什么建议吗


提前感谢。

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

  • HTML文件最初不是使用UTF-8保存的(或者可能是之前的一步;它最初不是使用UTF-8读取的)
  • stdout(System.out去的地方)不使用UTF-8

  • 如果您确保两者都正确设置,那么您的问题就会消失。如果不是,那么还有另一个可能的原因,根据你的问题到目前为止提供的信息是无法猜测的。至少,这个博客应该带来很多新的见解:

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

  • HTML文件最初不是使用UTF-8保存的(或者可能是之前的一步;它最初不是使用UTF-8读取的)
  • stdout(System.out去的地方)不使用UTF-8

  • 如果您确保两者都正确设置,那么您的问题就会消失。如果不是,那么还有另一个可能的原因,根据你的问题到目前为止提供的信息是无法猜测的。至少,这个博客应该带来很多新的见解:

    这是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();
    }
    

    这是由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();
    }