如何让 PrintWriter 编写 UTF-8?

How to make the PrintWriter to write UTF-8?

提问人:yeah its me 提问时间:1/14/2014 最后编辑:Andrew Thompsonyeah its me 更新时间:1/13/2020 访问量:71799

问:

如何编写UTF-8?PrintWriter

pstream = new PrintWriter(csocket.getOutputStream(), true);
String res = "some string";
pstream.println(res); // here I want to output string as UTF-8
Java UTF-8 打印机

评论


答:

63赞 Njol 1/14/2014 #1

使用:OutputStreamWriter

pstream = new PrintWriter(new OutputStreamWriter(
    csocket.getOutputStream(), StandardCharsets.UTF_8), true)

评论

1赞 Viktor Mukhachev 3/30/2020
注意:文档建议在 BufferedWriter 中使用包装以提高效率OutputStreamWriter
3赞 Daniil 1/14/2014 #2

看看 Java:PrintStream 和 PrintWriter 之间的区别讨论。

为了快速起见:您可以使用讨论中建议的 -Dfile.encoding=utf8 JVM 参数或方法(参见第二个答案)。

评论

1赞 thoni56 11/4/2018
JVM 使我摆脱了多年来一直遇到的问题。谢谢@Daniil!file.encoding
0赞 Error 7/13/2016 #3

您只能使用任何字符集写入文件,否则使用平台默认字符集 请参阅文档

1赞 Shahab Saalami 8/13/2016 #4
PrintWriter out1 = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    out1 = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8),true);
} else { 
    out1 = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"), true);
}

评论

1赞 Stealth Rabbi 2/14/2017
问题与Android无关。
1赞 dave110022 10/2/2016 #5

不要使用 PrintWriter。如果需要 UTF-8 编码,只需直接写入 OutputStream。

csocket.getOutputStream().write(res.getBytes("UTF-8"));

评论

0赞 Oliver Gondža 1/23/2019
虽然这是可能的,但这并不能提供 OP 可能正在寻找的东西。Writer
1赞 Parker 9/23/2020
有些情况是无法避免的,例如在子类化时。java.io.PrintWriterjavax.servlet.http.HttpServletResponseWrapper
0赞 dave110022 11/7/2021
我同意直接写入 OutputStream,这样您实际上可以确切地知道发生了什么。在一个伟大的类层次结构中使用包装器通常需要很长时间才能让它们工作 - 简单更好。
7赞 Krzysztof 1/13/2020 #6
OutputStream os = new FileOutputStream("file.txt");
PrintWriter pw = new PrintWriter(new OutputStreamWriter(os, "UTF-8"));