我正在试着从扫描仪中抓取汉字。
我在Windows10上运行的是cmd.exe。
我已经运行了CHCP 65001。

下面是代码。
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此代码正确地输出代码内部的汉字,同时将从扫描仪捕获的汉字作为垃圾输出。
如何解决这个问题?
发布于 2019-12-10 16:29:47
有几件事可能会导致这个问题。其中之一就是你的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 Central或Github上找到,它以maven工件的形式提供,并带有源代码和JavaDoc。下面是类StringUnicodeEncoderDecoder的JavaDoc。
我建议您将从扫描仪接收到的输入字符串转换为Unicode序列,这将帮助您了解您收到的是已经损坏的信息还是您的问题是显示问题。
https://stackoverflow.com/questions/59262800
复制相似问题