我无法将电子邮件附件(使用拉丁语和西里尔符号的Windows-1251编码中的简单文本文件)转换为字符串。我转换西里尔文有问题。 我将附件文件作为base64编码的字符串,如下所示:
Base64Encoded email Attachment
所以当我尝试解码时,我得到了“?”而不是西里尔符号。
如何才能获得正确的西里尔文(俄文)符号而不是“?”
我已经尝试过所有编码的代码,但没有任何帮助可以获得正确的俄语符号。
BASE64Decoder dec = new BASE64Decoder();
for (String key : Charset.availableCharsets().keySet()) {
System.out.println("K=" + key + " Value:" +
Charset.availableCharsets().get(key));
try {
System.out.println(new String(dec.decodeBuffer(encoded), key));
} catch (Exception e) {
continue;
}
}
事先谢谢你。
答案 0 :(得分:0)
我对BPEL及其使用的协议不是很熟悉。如果使用某些二进制协议在节点之间进行通信,则必须1)确保客户端和接收者使用相同的字符集,并且2)在此编码中将java字符串转换为正确的字节。 Java以UTF-16格式存储字符串内部。因此,当您执行String correct = new String(commonName.getBytes("ISO-8859-1"), "ISO-8859-5")
时,您将获得UTF-16中的正确字符串。然后,您需要将其导出为请求编码的字节,例如。 byte[] buff = correct.getBytes("UTF-8")
假设您在节点之间使用的编码是UTF-8。如果发生编码不同,那么你必须确保它实际上支持西里尔字符(例如ISO-8859-1 不支持它)。
如果您使用XML进行数据交换,请确保它在<?xml encoding="UTF-8"?>
中使用合适的编码。您不需要使用字节,只需要正确“导入”字符串(请参阅correct
变量)。写入XML会自动转换字符,但它(编码)必须支持您要写入的字符。因此,如果您设置encoding="ISO-88591"
,那么您将再次获得这些问号。