当前位置: 首页 > 面试题库 >

Java,使用扫描仪输入字符为UTF-8,无法打印文本

刘狐若
2023-03-14
问题内容

我可以将String转换为UTF-8数组,但不能像第一个String一样将其转换回String。

public static void main(String[] args) {

    Scanner h = new Scanner(System.in);
    System.out.println("INPUT : ");
    String stringToConvert = h.nextLine();
    byte[] theByteArray = stringToConvert.getBytes();

    System.out.println(theByteArray);
    theByteArray.toString();
    String s = new String(theByteArray);

    System.out.println(""+s);
}

如何打印theByteArray为字符串?


问题答案:
String s = new String(theByteArray);

应该真的

String s = new String(theByteArray, Charset.forName("UTF-8"));

这里的根本问题是String构造函数不是很聪明。String构造函数无法区分正在使用的字符集,并将尝试使用通常类似于ASCII或ISO-8859-1的系统标准对其进行转换。这就是为什么正常的A-
Za-z看起来正确,但其他所有内容都开始失效的原因。

byte是一种从-127到127的类型,因此对于UTF-8转换,需要将连续的字节连接起来。String构造函数无法将其与字节数组区分开,因此默认情况下它将单独处理每个字节(因此,基本字母数字在落入此范围内时将始终起作用)。

例:

String text = "こんにちは";
byte[] array = text.getBytes("UTF-8");
String s = new String(array, Charset.forName("UTF-8"));
System.out.println(s); // Prints as expected
String sISO = new String(array, Charset.forName("ISO-8859-1")); // Prints 'ããã«ã¡ã¯'
System.out.println(sISO);


 类似资料:
  • 问题内容: 我试图找到一种方法来从键盘输入。 我尝试使用: 该方法不存在。 我尝试了作为。但是,它并不总是在每种情况下都可行,因为我从我的方法中调用的另一个方法需要作为输入。因此,我必须找到一种显式将char作为输入的方法。 有什么帮助吗? 问题答案: 你可以从中提取第一个字符: 消耗正好一个字符,你可以使用: 要严格使用一个字符,可以使用:

  • 我正在编写一个有两个类的程序。类1包含一个名为“Probability”的构造函数,它接受三个输入:一个String和两个double。此代码如下所示: 还有一个修饰符,根据输入的字符串有五个条件(例如,如果this.inputString == "String1 "...),带有对无效输入的捕捉。类2多次调用“概率”构造函数来创建我的程序需要的概率。 这就是我的困境。有五个字符串输入,我需要能够

  • 我有以下课程 我不能输入歌曲名nr 1,因为它总是同时显示前两首歌。 如果我输入3,就像这样:

  • 我目前的logClass有一个问题,无法打印umlauts“üäß”,我创建这个命令是为了将控制台上的每个字符串打印到JTextPane。 我已经在方法“控制台”上将PrintStream设置为使用“UTF-8”,并且我已经尝试了不同的字体,但是在尝试打印特殊字符时,我总是会出现错误字符。有人会对如何解决这个问题提出建议吗? 这是我的代码:

  • 问题内容: 对于Java练习,我试图创建一个程序,该程序从键盘读取整数,直到输入负数为止。 并打印整数的最大值和最小值,而忽略负数。 一旦运行,是否可以在同一程序中进行连续输入?我必须每次都继续运行该程序以输入数字。 任何帮助,将不胜感激 这是我的代码的一部分-它可以工作,但是我认为有一种更简单的方法可以执行我想要的操作,但不确定如何操作! 问题答案:

  • 对于java实践,我正在尝试创建一个程序,从键盘读取整数,直到输入负数。 它打印整数的最大值和最小值,忽略负数。 是否有一种方法可以在同一个程序运行后继续输入?每次输入一个数字,我都要继续运行程序。 任何帮助将不胜感激 这是我的代码的一部分-它可以工作,但我认为有一种更简单的方法可以做我想做的事情,但不确定如何做!