DataOutputStream.writeUTF() 问题与 UTF 符号

问题描述

你好,当我的服务器发送 writeUTF("Cześć")(带有波兰语符号)时,客户端使用 DataInputStream.readUTF() 读取此消息并获取“cze[”,为什么会这样,我认为 UTF 支持波兰语符号,而且我查看了所有 UTF 字符表,有 ś 和 ć,所以为什么我的客户得到这个“[”而不是“ść”。而且我的控制台打印此消息,输出console Log

这个项目将是聊天应用程序,这是我的第一个手机屏幕 screen 1,你可以看到我正在使用的这个 TextView(显示文本的安卓方式)支持“ść”,这是我的第二个手机屏幕screen 2

解决方法

首先,您必须确保您的打印系统可以显示这些润色字符。

无论如何,您可以尝试在不使用 OutputStream 的情况下将字节写入 DataOutputStream

String message = "Cześć";
OutputStream os = socket.getOutputStream();
byte[] b = message.toString().getBytes("UTF-8");
os.write(b);
os.flush();

然后您需要更改读取这些字节的方式。如果您的程序只需要发送消息,一种方法是使用 BufferedReader:

BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    
String output = "";
String line;
    
while((line = reader.readLine()) != null) output += line;
    
reader.close();
    
System.out.println(output);

(顺便说一句抱歉我的英语不好)