【问题标题】:DataOutputStream.writeUTF() problem with UTF signsUTF 符号的 DataOutputStream.writeUTF() 问题
【发布时间】:2021-10-01 23:17:39
【问题描述】:

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

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

【问题讨论】:

  • 你确定控制台有支持这些字符的字体吗?
  • 不是打印到控制台,而是让客户端写入文件,然后使用您知道支持 UTF-8 的编辑器打开文件
  • 您可以编辑您的帖子,添加您读取发送的这些字节的方式吗?

标签: java utf-8 utf


【解决方案1】:

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

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

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);

(顺便说一句对不起我的英语不好)

【讨论】:

  • 好的,但我的 DataInputStream.readUTF 可以保留吗?或者我是否也必须将其更改为 readByte 或其他东西
  • 这不是问题。问题是显示系统必须支持 Unicode。
  • 你也需要改变它。 DataOutputStream 首先写入字符串的长度。 (但我不认为流的类型是你的问题)
  • 如果它不支持 Unicode,那么 8 字节编码必须是中欧编码。 'ASCII' 不支持这些字符。必须是 Windows-1257 或 MacCentralEurope 之类的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 2012-11-10
  • 1970-01-01
相关资源
最近更新 更多