如何将字节数组转换为日语字符

时间:2015-01-30 13:53:40

标签: java arrays string bytearray inputstream

某些工具将日语内容作为字节数组发送给我。

因此,使用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();
        } 

但我们没有得到预期的结果 请提示

1 个答案:

答案 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");