我正在开发应用程序,在其中我接收到编码为base64的消息。 消息可以用所有语言接收,也可以只包含数字。我需要将base64转换为可读文本。 获取文本。 我在用 apache.commons.codec.binary.Base64和 apache.commons.codec.binary.Hex
我有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();
}
答案 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集中的所有字符。您不必担心它们是俄语,希伯来语还是任何其他类型的字符。