如何将字节数组转换为日语字符
how to convert byte array to Japanese character
一些工具将日语内容作为字节数组发送给我。
所以使用 java 我必须读取那个字节数组并显示日文内容。
我没有任何实现此目标的想法。
直到现在我尝试使用下面提到的程序来检查这个转换是如何工作的:
String s= "業界支出TXT_20150130170955";
byte b1[];
try {
b1 = s.getBytes();
for (int j=0;j<b1.length; j++){
System.out.println(b1[j]+"-----------"+(char)b1[1]);
}
} catch (UnsupportedEncodingException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
现在这给了我一些垃圾数据。我知道我这样做是完全错误的,但我不知道将字节流读取为日文字符。
如有任何帮助,我们将不胜感激。
编辑:1
我们需要从 "decoded" 字节数组中获取日文字符
我尝试了以下操作:
byte[] decoded = Base64.decodeBase64("qzD8MMkwGk/hVClSKHWCaYGJCP/GMK0wuTDIMAn/DQAKAA0ACgApUih1xzD8ML8w1lOXX+VlfgCgUt92l15qdfdTfgCgUt92l15+AClSKHVzijB9fgAakKiMfgB+AKsw/DDJMBpP4VQNVE1Sfg==");
try {
System.out.println(new String(decoded, "UTF-8") + "\n");
System.out.println(new String(decoded, "SHIFTJIS") + "\n");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但我们没有得到预期的结果
请告知
要将字节数组转换为 String
,您应该使用 String(byte[] bytes, Charset charset)
构造函数。
要将字节正确解码为字符序列,您必须知道用于解释字节的字符编码。最常见的是 UTF-8。
示例:
// Bytes of UTF-8 encoded Japanese word: "そこ" (there)
byte[] data = new byte[]{-29, -127, -99, -29, -127, -109};
String s = new String(data, StandardCharsets.UTF_8);
System.out.println(s);
输出:
そこ
请注意,可以使用
实现相反的顺序 (String
=> byte[]
)
byte[] String.getBytes(Charset charset)
方法:
String s = "そこ";
byte[] data = s.getBytes(StandardCharsets.UTF_8);
System.out.println(Arrays.toString(data));
打印:
[-29, -127, -99, -29, -127, -109]
最后的笔记
避免使用仅采用字节数组且没有字符集的 String
构造函数,以及没有参数的 String.getBytes()
方法,因为将 String
转换为 byte[]
或者反之,需要编码;即使你没有指定编码,仍然会使用一个:平台的默认编码可能因平台而异,甚至从 运行-to-运行 因此你的代码将变得不可移植(在不同的机器上可能会有不同的工作方式)。
7.0
之前的Java
如果您在 7.0 之前使用 Java,则可以使用构造函数和 getBytes()
方法,该方法将字符集作为 String
而不是 Charset
.您必须提供字符集的 名称:
String(byte[] bytes, String charsetName)
byte[] getBytes(String charsetName)
示例:
// From String to byte array:
byte[] data = s.getBytes("UTF-8");
// From byte array to String:
String s = new String(data, "UTF-8");
一些工具将日语内容作为字节数组发送给我。
所以使用 java 我必须读取那个字节数组并显示日文内容。
我没有任何实现此目标的想法。
直到现在我尝试使用下面提到的程序来检查这个转换是如何工作的:
String s= "業界支出TXT_20150130170955";
byte b1[];
try {
b1 = s.getBytes();
for (int j=0;j<b1.length; j++){
System.out.println(b1[j]+"-----------"+(char)b1[1]);
}
} catch (UnsupportedEncodingException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
现在这给了我一些垃圾数据。我知道我这样做是完全错误的,但我不知道将字节流读取为日文字符。
如有任何帮助,我们将不胜感激。
编辑:1
我们需要从 "decoded" 字节数组中获取日文字符 我尝试了以下操作:
byte[] decoded = Base64.decodeBase64("qzD8MMkwGk/hVClSKHWCaYGJCP/GMK0wuTDIMAn/DQAKAA0ACgApUih1xzD8ML8w1lOXX+VlfgCgUt92l15qdfdTfgCgUt92l15+AClSKHVzijB9fgAakKiMfgB+AKsw/DDJMBpP4VQNVE1Sfg==");
try {
System.out.println(new String(decoded, "UTF-8") + "\n");
System.out.println(new String(decoded, "SHIFTJIS") + "\n");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但我们没有得到预期的结果 请告知
要将字节数组转换为 String
,您应该使用 String(byte[] bytes, Charset charset)
构造函数。
要将字节正确解码为字符序列,您必须知道用于解释字节的字符编码。最常见的是 UTF-8。
示例:
// Bytes of UTF-8 encoded Japanese word: "そこ" (there)
byte[] data = new byte[]{-29, -127, -99, -29, -127, -109};
String s = new String(data, StandardCharsets.UTF_8);
System.out.println(s);
输出:
そこ
请注意,可以使用
实现相反的顺序 (String
=> byte[]
)
byte[] String.getBytes(Charset charset)
方法:
String s = "そこ";
byte[] data = s.getBytes(StandardCharsets.UTF_8);
System.out.println(Arrays.toString(data));
打印:
[-29, -127, -99, -29, -127, -109]
最后的笔记
避免使用仅采用字节数组且没有字符集的 String
构造函数,以及没有参数的 String.getBytes()
方法,因为将 String
转换为 byte[]
或者反之,需要编码;即使你没有指定编码,仍然会使用一个:平台的默认编码可能因平台而异,甚至从 运行-to-运行 因此你的代码将变得不可移植(在不同的机器上可能会有不同的工作方式)。
7.0
之前的Java如果您在 7.0 之前使用 Java,则可以使用构造函数和 getBytes()
方法,该方法将字符集作为 String
而不是 Charset
.您必须提供字符集的 名称:
String(byte[] bytes, String charsetName)
byte[] getBytes(String charsetName)
示例:
// From String to byte array:
byte[] data = s.getBytes("UTF-8");
// From byte array to String:
String s = new String(data, "UTF-8");