Java 从 OS X 编码到 Windows
Java encoding from OS X to Windows
我用 swing GUI 做了一个原始的多客户端聊天。只要两个人都从同一个 OS 写,一切都很好。如果其中一个从 Windows 写入而另一个从 OS X 写入,则某些特殊字符的编码会变得很疯狂。 (我来自 CZE,我们使用 š、ě、č、ř、ž...等字符)。我已经搜索了很长时间,但没有找到任何有用的东西。
我将输入和输出定义为:
in = new BufferedReader(new InputStreamReader(soc.getInputStream()));
out = new PrintWriter(new OutputStreamWriter(soc.getOutputStream()));
其中 soc 是用于连接到服务器端的套接字。
发送过程很简单:
out.println(message);
其中 message 是一个字符串,它是我通过调用方法 .getText() 从 JTextArea 获得的
我知道为什么会出现这个问题,但是我找不到任何合理的解决方案。
任何帮助将不胜感激。
谢谢
从 Input/OutputStreams 读取字符数据时,最好始终指定字符编码。否则将使用平台默认编码(在所有系统上可能不同)。
in = new BufferedReader(new InputStreamReader(soc.getInputStream(), StandardCharsets.UTF_8));
out = new PrintWriter(new OutputStreamWriter(soc.getOutputStream(), StandardCharsets.UTF_8));
我用 swing GUI 做了一个原始的多客户端聊天。只要两个人都从同一个 OS 写,一切都很好。如果其中一个从 Windows 写入而另一个从 OS X 写入,则某些特殊字符的编码会变得很疯狂。 (我来自 CZE,我们使用 š、ě、č、ř、ž...等字符)。我已经搜索了很长时间,但没有找到任何有用的东西。
我将输入和输出定义为:
in = new BufferedReader(new InputStreamReader(soc.getInputStream()));
out = new PrintWriter(new OutputStreamWriter(soc.getOutputStream()));
其中 soc 是用于连接到服务器端的套接字。
发送过程很简单:
out.println(message);
其中 message 是一个字符串,它是我通过调用方法 .getText() 从 JTextArea 获得的
我知道为什么会出现这个问题,但是我找不到任何合理的解决方案。 任何帮助将不胜感激。
谢谢
从 Input/OutputStreams 读取字符数据时,最好始终指定字符编码。否则将使用平台默认编码(在所有系统上可能不同)。
in = new BufferedReader(new InputStreamReader(soc.getInputStream(), StandardCharsets.UTF_8));
out = new PrintWriter(new OutputStreamWriter(soc.getOutputStream(), StandardCharsets.UTF_8));