0

我在 Windows 上的 JLabel 中编码有问题(在 *nix 操作系统上一切正常)。这是一张图片: http: //i.imgur.com/DEkj3.png(有问题的字符是顶部带有 ` 的 L,它应该是 ł),这里的代码:

public void run()
    {
            URL url;
            HttpURLConnection conn;
            BufferedReader rd;
            String line;
            String result = "";
            try {
                url = new URL(URL);
                conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                while ((line = rd.readLine()) != null) {
                    result += line;
                }
                rd.close();
            } catch (Exception e) {
                try
                {
                    throw e;
                }
                catch (Exception e1)
                {
                    Window.news.setText("");
                }
            }
                Window.news.setText(result);
        }

我试过Window.news.setText(new String(result.getBytes(), "UTF-8"));了,但没有帮助。也许我需要使用指定的 JVM 标志运行我的应用程序?

4

1 回答 1

3

new InputStreamReader当您在没有显式字符集的情况下使用时,您会在数据到达窗口之前破坏数据。这将使用平台默认字符集,在 Windows 上可能是 cp1252,因此您的字符损坏。

如果您知道正在读取的数据的字符集,则应明确指定它,例如:

new InputStreamReader(conn.getInputStream(), "UTF-8")

但是,在从任意 url 下载数据的情况下,您可能应该更喜欢“Content-Type”标头中的字符集(如果存在)。

于 2013-01-17T19:29:58.263 回答