繁体   English   中英

Windows1251的Base64字符串(西里尔字母)

[英]Base64 String to Windows1251 (cyrillic symbols)

我在将电子邮件附件(Windows-1251带有拉丁和西里尔字母编码的简单文本文件)转换为字符串时遇到麻烦。 即我在转换西里尔字母时遇到问题。 我得到的附件文件是base64编码的String,如下所示:

Base64编码的电子邮件附件

原始文件

因此,当我尝试对其进行解码时,我得到了“?” 而不是西里尔符号。

如何获得正确的西里尔字母(俄语)而不是“?”符号?

我已经用所有编码尝试了此代码,但是没有帮助获得正确的俄语符号。

    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;
        }
    }

预先谢谢你。

我对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" ,那么您将再次得到那些问号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM