将base64转换为文本

时间:2018-12-04 14:30:23

标签: java internationalization base64 hex

我正在开发应用程序,在其中我接收到编码为base64的消息。 消息可以用所有语言接收,也可以只包含数字。我需要将base64转换为可读文本。 获取文本。 我在用 apache.commons.codec.binary.Base64和 apache.commons.codec.binary.Hex

我有2个问题:

  1. 当我尝试解析以英文或数字接收的邮件时 我无法正确解析base 64。
  2. 我如何区分以俄文或希伯来文等4位十六进制表示的base64消息以英语或以数字或英文等2位十六进制表示的数字之间的区别。

这是我的代码:

private String convertBase64StringToText(String base64) {
    base64 = "MdmMBg==";//base64.replace("\n", "").replace("\r", "");
    byte[] decoded = Base64.decodeBase64(base64);
    String basetohex = Hex.encodeHexString(decoded);
    char ch[] = basetohex.toCharArray();
    String output = new String(ch);
    output = output.toUpperCase();
    StringBuilder str = new StringBuilder();
    for(int i=0;i<ch.length;i=i+2){

        str.append((char) Integer.parseInt(output.substring(i, i + 2), 16));
        //for languages like russian or hebrew i'm changing from 
         //output.substring(i, i + 2) to output.substring(i, i + 4) and it 
          //works fine

    }

    System.out.println("str.toString():"+str.toString());//received: 1Ù instead of 1234
    return str.toString();
}

2 个答案:

答案 0 :(得分:0)

  

以下四个实用程序方法可帮助您与其他设备进行编码和解码   Base64。请尝试使用它们,我认为您的问题将会解决,因为这些方法使用UTF-8作为其字符集:

public static String encodeBase64(String plainText) {
    byte[] plainTextByteArray = plainText.getBytes(StandardCharsets.UTF_8);
    String base64Encoded = Base64.getEncoder().encodeToString(plainTextByteArray);
    return base64Encoded;
}

public static String decodeBase64(String base64File) {
    byte[] byteArray = Base64.getDecoder().decode(base64File);
    String decodedStr = new String(byteArray, StandardCharsets.UTF_8);
    return decodedStr;
}

public static String encodeBase64(byte[] fileByteArray) {
    String base64Encoded = Base64.getEncoder().encodeToString(fileByteArray);
    return base64Encoded;
}

public static byte[] decodeBase64ToByteArray(String base64File) {
    byte[] byteArray = Base64.getDecoder().decode(base64File);
    return byteArray;
}

答案 1 :(得分:0)

base64编码将应用于您收到的数据的二进制形式。

一旦您具有二进制形式,就需要使用字符编码,例如UTF-8(但取决于最初使用的是什么)将二进制数据转换为Unicode字符串。

一旦有了Unicode字符串,它将能够支持Unicode集中的所有字符。您不必担心它们是俄语,希伯来语还是任何其他类型的字符。