某些工具将日语内容作为字节数组发送给我。
因此,使用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
我们需要从“已解码”的BYTE ARRAY中获取日语字符 我试过以下事情:
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();
}
但我们没有得到预期的结果 请提示
答案 0 :(得分:2)
要将字节数组转换为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
=&gt; 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[]
或者另一方面,需要编码;即使你没有指定一个编码,仍然会使用一个:平台的默认编码可能因平台而异,甚至从一个运行到另一个运行,因此你的代码将变得不可移植(在不同的机器上可能会有不同的工作方式)
适用于7.0之前的Java
如果您使用7.0之前的Java,则可以使用构造函数和getBytes()
方法,该方法将字符集作为String
而不是Charset
。您必须提供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");