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

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