代码:
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"));
输入:
输入名称:たなかです
输出:
�f�q���n�@
鐃�鐃�鐃緒申鐃�鐃�
�ソスf�ソスq�ソス�ソス�ソスn�ソス@
���f���q���������n���@
�f�q���n�@
没有一本是可读的日语。我也试过了 InputStreamReader
以及 DataInputStream
与 Byte[]
.
2条答案
按热度按时间6za6bjd01#
如何用代码正确地打印字符串到控制台
name.getBytes(encoding)
在您的代码中,将获得String name
使用utf-8编码。所以当你打字的时候たなかです" 在控制台中,您将获得字节数组{0xE3, 0x81, 0x9F, 0xE3, 0x81, 0xAA, 0xE3, 0x81, 0x8B, 0xE3, 0x81, 0xA7, 0xE3, 0x81, 0x99}
.它是基于utf-8的表示,因此您只能在构造函数的第二个参数中指定编码
String(byte[] bytes, String charsetName)
是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"));
.mitkmikd2#
下面的代码片段中有一个小问题,您对不同的字符集使用相同的编码,
假设要使用不同的字符集打印日语字符,请使用