如何在Java中的混合编码中将字节数组编码为String?

时间:2014-11-19 03:22:00

标签: java string encoding

我有一个来自其他系统的字节数组,字符串应该在编码后混合英文,日文和中文字符,我该如何处理呢?谢谢!

    //the byte[] represents "C注ファイル         PARM 年月日输入不正确         入力文字列"
    byte[] buf = new byte[] { 64, 64, 64, 64, 64, -61, 14, 73, 68, 67, -97,
            67, 71, 67, -126, 67, -81, 15, 64, 64, 64, 64, 64, 64, 64, 64,
            64, -41, -63, -39, -44, 64, 14, 82, -23, 90, -63, 84, -44, 85,
            -29, 84, -22, 73, -70, 91, -98, 84, -74, 15, 64, 64, 64, 64,
            64, 64, 64, 64, 64, 14, 70, 101, 69, -9, 69, -54, 72, -14, 75,
            -76, 15, 64, 64, 64, 64, 64, 64, 64, 64, 64 };
    String japaneseStr = new String(buf,"cp939");// convert to japanese
    System.out.println(japaneseStr);//output:"     C注ファイル         PARM 衷扞唖詑煤証昿翰         入力文字列         "

    String chineseStr = new String(buf,"cp935"); // convert to chinese
    System.out.println(chineseStr); //output:"    C堡ファイル         PARM 年月日输入不正确         ㄅ㈦⑹绑兜         "
    //"注ファイル"       is japanese
    //"年月日输入不正确"   is chinese
    //"入力文字列"       is japanese
    //i want to get the result is "     C注ファイル         PARM 年月日输入不正确         入力文字列         "

1 个答案:

答案 0 :(得分:3)

角色所属的语言无关紧要。重要的是如何将原始String编码为结果字节数组。

您可以使用String的以下构造函数将字节数组解码为String

String(byte[] bytes, String charsetName)

String(byte[] bytes, Charset charset)

您可以将字节数组传递给String的构造函数并提供字符集(通过名称或Charset对象,请参阅StandardCharsets中的常量)。

因此,例如,如果原始String使用UTF-8字符编码进行编码,您可以像这样对其进行解码:

String str = new String(source, "UTF-8");

或者:

String str = new String(source, StandardCharsets.UTF_8);

您的例子:

如果您的源确实使用UTF-8进行编码,它将如下所示:

byte[] source = {-26, -75, -117, -24, -81, -107, -26, -107, -120, -26, -98, -100,
    97, 98, 99, 100, 101, -26, -106, -80, -25, -108, -97, -25, -108, -93, -25,
    -82, -95, -25, -112, -122, -29, -126, -73, -29, -126, -71, -29, -125, -122,
    -29, -125, -96}

以下代码:

String str = new String(source, StandardCharsets.UTF_8);
System.out.println(str);

打印:

测试效果abcde新生産管理システム