Java 使用扫描仪读取日语字符

Java 使用扫描仪读取日语字符,java,encoding,java.util.scanner,Java,Encoding,Java.util.scanner,可能重复: 我的输入文件名可能有日文字符,我正在尝试使用扫描仪读取文件名 Scanner sc = new Scanner(System.in,"utf-8"); System.out.println("Encoding is :" + Charset.defaultCharset()); System.out.println("Enter the path:"); inputFilePath = sc.nextLine(); 如果我的输入是用于eg-漢字 当我打印文件名时,我的输出是 E

可能重复:

我的输入文件名可能有日文字符,我正在尝试使用扫描仪读取文件名

Scanner sc = new Scanner(System.in,"utf-8");
System.out.println("Encoding is :" + Charset.defaultCharset());

System.out.println("Enter the path:");
inputFilePath = sc.nextLine();
如果我的输入是用于eg-漢字

当我打印文件名时,我的输出是

Encoding is :UTF-8
Input File Path:漢字
我也试过,

byte[] jis = sc.nextLine().getBytes("Shift_JIS");
System.out.println(new String(jis));
我的输出是

Input File Path:??��??�\
我怎样才能纠正这个问题?

这是我的答案


每个字符串(概念上)已经是一个字符序列,包括中文字符。。编码只在您需要将其转换为字节时才进入,而您的作业不需要这样做。只需使用字符串的哈希代码。事实上,当您创建一个HashMap时,这正是在后台发生的事情

Eclipse
正在从控制台读取数据,该控制台默认设置为UTF-8。要读取数据,需要将控制台编码更改为日语支持的编码

在运行配置中,将编码更改为日语支持的编码,然后重试


您的代码是正确的,唯一的问题是您正在阅读
utf-8
,然后将其转换为打印垃圾字符的
Shift\u JIS

你试过用这个吗

Scanner sc = new Scanner(System.in,"utf-8");
System.out.println("Encoding is :" + Charset.defaultCharset());

System.out.println("Enter the path:");
String inputFilePath = sc.nextLine();
System.out.println("Input path:" + new String(inputFilePath.getBytes("utf-8")));

希望这有帮助

但是当我从扫描器读取值时,我提到了enoding作为utf-8。我想这就足够了,因为你说的是jis=inputFilePath.getBytes(“UTF-16”);是吗?如果我给Scanner sc=新的Scanner(System.in),这将不起作用;jis=inputFilePath.getBytes(“UTF-16”);不,仍然得到乱七八糟的输出输入路径:漢字 输入路径:æ¼、å-@Abi,这个答案看起来是正确的。您能确保终端字符编码也设置为UTF-8吗?是的,当我将编码更改为UTF-16BE或UTF-16LE时,我能够查看日语输入。非常感谢!这是有误导性的,UTF-8确实支持日语(以及与此相关的任何语言),并且应该优先于传统编码,如Shift JIS