错误的非英语字符串编码

时间:2017-07-23 13:06:49

标签: java character-encoding stream internationalization

我正在尝试发送包含英语和俄语文本的消息,但俄语文本显示为" ?? ???????"

PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
writer.println("English" + "На русском");
writer.flush();

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

所以,你的问题与IntelliJ IDEA无关。

仅接受PrintWriter的{​​{1}}构造函数会创建一个OutputStream,它使用JVM的默认字符编码。您可以通过调用PrintWriter来检查JVM的默认字符编码。但是,您不应该依赖它在发送端或接收端具有任何特定值。最好是设置JVM的默认字符编码,或者在创建Charset.defaultCharset()时提供特定的字符编码。以下应该这样做:

PrintWriter

如果您同时控制发送方和接收方,则可能必须在另一方添加 Charset charset = StandardCharsets.UTF_8; OutputStreamWriter osw = new OutputStreamWriter( outputStream, charset ); PrintWriter printWriter = new PrintWriter( new BufferedWriter( osw ) ); 的{​​{1}}。