gpt4 book ai didi

java - 如何使 System.in 输入流读取 utf-8 字符?

转载 作者:行者123 更新时间:2023-12-02 04:42:35 24 4
gpt4 key购买 nike

这是我的代码:

public class MyTestClass {
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
InputStream inputStream = System.in;
int read = inputStream.read();
System.out.println(read);
System.out.println((char)read);
System.out.println(s);
}
}

当我运行程序时,我输入了两次字母ğ。控制台输出将是:

ğ
ğ
196
Ä
ğ

如何才能看到正确的字母而不是 Ä?扫描仪似乎做了正确的事情。

实际上,为什么这种方法行不通?这里有什么问题吗?

最佳答案

InputStream#read() 的 javadoc州

Reads the next byte of data from the input stream.

但事实证明,字符 ğ 需要 2 个字节才能以 UTF-8 表示。因此,您需要读取两个字节。您可以使用InputStream#read(byte[])

byte[] buffer = new byte[2];
inputStream.read(buffer);

一旦字节数组包含适当的字节,您就需要以 UTF-8 对其进行解码。你可以这样做

char val = StandardCharsets.UTF_8.decode(ByteBuffer.wrap(buffer)).get();

变量val现在将包含解码后的字符。

请注意,某些 UTF-8 编码字符只需要一个字节来表示,因此如果您知道需要多少个字节,则只需执行我们刚才所做的操作。否则,读取所有内容并将其传递给解码器。

关于java - 如何使 System.in 输入流读取 utf-8 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26077178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com