有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java此代码正确地输出代码中的汉字,而将从扫描仪捕获的汉字作为垃圾输出

我正试图从扫描仪上捕捉汉字

我在cmd跑步。在Windows10上执行

我已经运行了CHCP 65001

enter image description here

这是代码

import java.util.Scanner;

public class JavaScannerCN
{
  public static void main (String[] args)
  {
    Scanner scanner = new Scanner(System.in);
    System.out.print("中文 user name: ");
    String username = scanner.next();
    scanner.close();
    System.out.println(String.format("Hello, %s", username));
    System.out.println((int)'中');
    System.out.println((int)username.charAt(0));
  }
}

由于@ParkerHalo提醒,接收到的字符似乎已损坏,因为输出已损坏

Hello, ��
20013
96

此代码正确输出代码中的汉字,而将从扫描仪捕获的汉字作为垃圾输出

如何解决这个问题


共 (1) 个答案

  1. # 1 楼答案

    有几件事可能会导致这个问题。其中一个在windows环境中设置了字符集。我建议您使用一种诊断工具,它可以帮助您诊断您的问题,进而引导您找到合适的解决方案。有一个开源java库MgntUtils,它有一个实用程序,可以将字符串转换为unicode序列,反之亦然:

    result = "Hello World";
    result = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(result);
    System.out.println(result);
    result = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(result);
    System.out.println(result);
    

    此代码的输出为:

    \u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064
    Hello World
    

    该库可以在Maven CentralGithub找到,它作为maven工件提供,并带有源代码和JavaDoc。下面是类StringUnicodeEncoderDecoder的JavaDoc

    我建议您将从扫描仪接收到的输入字符串转换为Unicode序列,这将帮助您了解您是否收到了已损坏的信息,或者您的问题是显示问题