【发布时间】:2016-04-09 23:45:28
【问题描述】:
我在这里的第一篇文章。 好吧,我正在构建一个简单的应用程序,用于通过控制台(cmd 和终端)进行消息传递,只是为了学习,但是在阅读和使用字符集编写文本时遇到了问题。
这是我发送消息的初始代码,Main.CHARSET 设置为 UTF-8:
Scanner teclado = new Scanner(System.in,Main.CHARSET);
BufferedWriter saida = new BufferedWriter(new OutputStreamWriter(new BufferedOutputStream(cliente.getOutputStream()),Main.CHARSET)));
saida.write(nick + " conectado!");
saida.flush();
while (teclado.hasNextLine()) {
saida.write(nick +": "+ s);
saida.flush();
}
以及接收代码:
try (BufferedReader br = new BufferedReader(new InputStreamReader(servidor,Main.CHARSET))){
String s;
while ((s = br.readLine()) != null) {
System.out.println(s);
}
}
当我发送“olá”或类似“ÁàçÇõÉ”(巴西葡萄牙语)之类的内容时,我在 windows cmd 上只有空格(未在 linux 中测试)。
所以我测试了以下代码:
Scanner s = new Scanner(System.in,Main.CHARSET);
System.out.println(s.nextLine());
对于输入“olá”,打印“ol”。
问题是,如何读取控制台以使输入被正确读取,并可以传输给另一个用户并正确显示给他。
【问题讨论】:
-
您确定 Windows 控制台实际上可以显示 UTF-8(或默认为 UTF-8)。您只需将输出写入文件而不是屏幕,然后使用支持 UTF8 的编辑器查看文件即可进行检查。
-
我把输出放到一个 txt 文件中,OutputStreamWriter 带有 UTF-8 字符集,输出是:ol。
标签: java sockets character-encoding message system.in