utf-8转换并不总是有效

时间:2012-09-11 15:36:21

标签: java utf-8 screen-scraping

我先搜索其他堆栈然后在这里输入,我没有发现任何类似的东西。 我必须刮掉不同的utf-8网页,其中包含

等文字

“Oggièunabellissima giornata”

问题出现在角色“è”

我使用jtidy和xpath查询表达式提取此文本,然后将其转换为

byte[] content = filteredEncodedString.getBytes("utf-8");
String result = new String(content,"utf-8");

其中filteredEncodedString包含文本“Oggièunabellissima giornata”。 此过程适用于目前为止分析的大多数网页,但在某些情况下,它不会提取utf-8字符串。页面编码始终与文本相似。

9月14日编辑

我按照以下方式修改了我的代码以获取utf-8编码的页面:

URL url = new URL(currentUrl);
        URLConnection conn = url.openConnection();
        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729)");
        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), getEncode()));

        String line="";
        String domString="";
        while((line = in.readLine()) != null) {
            domString+=line.toString();
        }

        byte[] bytes = domString.getBytes("UTF-8");
        in.close();

        return bytes;
        //return text.getBytes();

其中 getEncode()返回页面编码,在这种情况下为utf-8。但是我仍然注意到“或”are没有正确阅读。 这段代码有问题吗? 再次感谢!

10月2日编辑

此代码似乎有效。问题是我没有发布的Dom文档创建(抱歉这个!),上面的方法返回了字节。

2 个答案:

答案 0 :(得分:1)

事实上你不能将一个字符串“转换”为utf-8。如果字节已被错误地转换为字符,那么您已经丢失了数据。

答案 1 :(得分:0)

您可以尝试将页面作为字节数组,而不是字符串,然后将其StringUtils转换为utf-8字符串。