繁体   English   中英

如何让eclipse在unicode中打印出奇怪的字符?

[英]How do I make eclipse print out weird characters in unicode?

所以我试图让我的程序输出一个带有名单列表的文本文件。 一些名字有奇怪的字符,如Åström。

我已经从以“UTF-8”编码的网页中抓取了这些名称列表,或者至少我很确定它的确如此,因为页面来源说

“meta http-equiv =”Content-Type“content =”text / html; charset = UTF-8“/”

这是我到目前为止所尝试的:

public static void write(List<String> list) throws IOException  {
        Writer out = new OutputStreamWriter(new FileOutputStream("test.txt"), "UTF-8");
        try {
            for (int i=0;i<list.size();i++) {
                try {
                    byte[] utf8Bytes = list.get(i).getBytes("UTF-8");
                    out.write(new String(utf8Bytes, "UTF-8"));
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }

                out.write(System.getProperty("line.separator"));

            }
        }
        finally {
        out.close();
        }
    }

我有点困惑为什么它不起作用。 我得到的输出是“Ã...ström”,这非常奇怪。

有人可以指点我正确的方向吗? 谢谢!

在另一个不相关的说明中,除了笨重之外,是否有更简单的方法将新行写入文本文件

out.write(System.getProperty( “line.separator”));

我有? 我在网上看到了它并且它有效,但我只是想知道是否有更清洁的方式。

Eclipse > Preferences > General > Workspace > Text file encoding为UTF-8。

内容确实是UTF-8,如果打印到控制台,它似乎没问题。 可能导致该问题的是字符串的解码和编码,这是不必要的。 而不是OutputStreamWriter尝试使用java.io.PrintWriter。 它有println方法,最后用系统行分隔符打印出字符串。 它看起来像:

printStream.println(list.get(i));

此外,打开文件以查看它时尝试使用浏览器。 它们允许您在打开后选择编码,以便您可以快速尝试多种编码以查看实际使用的内容。

记事本不是一个功能特别丰富的编辑器。 它将尝试猜测文档编码,有时会出现意外结果 “纯文本”文档不带有关于其编码的任何元数据,这给它们带来了某些限制。 Windows应用程序(包括记事本)通常依赖字节顺序标记 (Java字符串中的U + FEFF或"\" )来确定编码是否为Unicode格式。 这可能有助于记事本; 它会对你的网页问题毫无用处。

HTML 4规范定义了如何设置输出编码 除了指定元编码之外,还应设置Content-Type HTTP标头。

您没有在网络应用中提及您正在使用的内容。 servlet应该设置内容类型setContentType("text/html; charset=UTF-8") ; JSP应该使用page指令来做同样的事情。 其他视图技术将提供类似的机制。


byte[] utf8Bytes = list.get(i).getBytes("UTF-8");
out.write(new String(utf8Bytes, "UTF-8"));

此代码执行一些无用的操作; 它将字符数据从UTF-16转码为UTF-8,然后从UTF-8转换回UTF-16,然后将数据写入Writer (它将UTF-16再次转码为UTF-8)。 这段代码是等效的:

String str = list.get(i);
out.write(str);

使用PrintWriter获取换行支持。


您可以在此处此处此处阅读有关Java中字符编码的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM