java - Java字符集-如何从System.in获得正确的输入?

标签 java sockets character-encoding message system.in

我的第一篇文章在这里。
好吧,我正在构建一个用于通过控制台(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”。

问题是,如何读取控制台,以便正确读取输入,并可以将其传输给另一个用户并正确显示给他。

最佳答案

如果您只想在文本文件中输出葡萄牙语,那将很容易。

您唯一需要关心的是通过UTF-8编码显示。

您可以使用一种非常简单的方法,例如

    String text = "olá";
    FileWriter fw = new FileWriter("hello.txt");
    fw.write(text);
    fw.close();

然后通过记事本或任何支持UTF-8的文本工具打开hello.txt

否则您必须将工具的默认字体更改为UTF-8。

如果您想在控制台上显示它,我想pvg已经回答了您。

好吧,看来您仍然对此感到困惑。

这是您可以尝试的简单代码。
        Scanner userInput = new Scanner(System.in);//type olá plz
        String text = userInput.next();
        System.out.println((int)text.charAt(2));//you will see output int is 63        

        char word = 'á'; // this word covert to int is 225
        int a = 225;
        System.out.println((int)word);// output 225
        System.out.println((char)a);  // output  á

那么,结论是什么?

如果您使用控制台输入葡萄牙语,然后接上它,那么您会得到完全不同的单词,而不是乱七八糟的单词。

关于java - Java字符集-如何从System.in获得正确的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34623749/

相关文章:

java - 如何在 Akka Actor 之间传递远程引用?

python - 套接字 : Reading UDP Packet

java - 无线网络聊天程序需要java代码

java - 如何使用 apache httpclient fluent 4.3.2 在请求中设置字符集

java - 让 .set 在 Java 中使用对象数组

关闭连接后 Java TLS session 重用

java - 为什么我使用 Quicksort 获得线性运行时间?

java - 终止线程的正确方法

c++ - 使用 IwGxFontDrawText 显示西里尔字体

grails - 在我将 grails 从 2.3.7 升级到 2.4.3 后,所有 request.JSON 数据都被分解了。