4

代码:

Scanner sc = new Scanner(System.in);
System.out.println("Enter Name : ");
String name = sc.nextLine();
System.out.println(name);

String encoding = "UTF-8";
System.out.println(new String(name.getBytes(encoding), "euc-jp"));
System.out.println(new String(name.getBytes(encoding), "Shift_JIS"));
System.out.println(new String(name.getBytes(encoding), "ISO-2022-JP"));
System.out.println(new String(name.getBytes(encoding), "ISO8859-1"));

输入:

输入姓名:たなかです</p>

输出:

4

2 回答 2

0

如何正确打印字符串以使用您的代码进行控制台

name.getBytes(encoding)在您的代码中将获得String nameUTF-8 编码的原始字节表示。所以当你在控制台输入 "たなかです" 时,你会得到 byte 的数组{0xE3, 0x81, 0x9F, 0xE3, 0x81, 0xAA, 0xE3, 0x81, 0x8B, 0xE3, 0x81, 0xA7, 0xE3, 0x81, 0x99}

它是基于 UTF-8 的表示,因此您可以在构造函数的第二个参数中指定的唯一编码String(byte[] bytes, String charsetName)UTF-8.

System.out.println(new String(name.getBytes(encoding), "UTF-8"));

它将字节数组转换{0xE3, 0x81, 0x9F, ... }String对象,并正确打印到控制台。

如何将字符串的内部表示形式获取为字节数组

String对象使用 UTF-16 表示内部文本(有关详细信息,请参阅https://docs.oracle.com/javase/8/docs/technotes/guides/intl/overview.html)。

因此,name.getBytes("UTF-16")当您想要获得与内部文本表示相同的字节数组时,您必须使用它。您可以使用 将其反转为String对象System.out.println(new String(name.getBytes("UTF-16"), "UTF-16"));

于 2020-05-12T15:57:43.810 回答
-1

您的以下代码片段中存在小问题,您对不同的字符集使用相同的编码,

String encoding = System.getProperty("file.encoding"); 
System.out.println(new String(name.getBytes(encoding), "UTF-8"));

假设您想使用不同的字符集打印日文字符,请使用此

 System.out.println(new String(name.getBytes("euc-jp"), "euc-jp"));
 System.out.println(new String(name.getBytes("Shift_JIS"), "Shift_JIS"));
 System.out.println(new String(name.getBytes("ISO-2022-JP"), "ISO-2022-JP"));
 System.out.println(new String(name.getBytes("ISO8859-1"), "ISO8859-1"));
于 2016-03-28T11:48:19.180 回答