- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在将电子邮件附件(带有拉丁文和西里尔文符号的 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;
}
}
先谢谢你了。
最佳答案
我对 BPEL 及其使用的协议(protocol)不是很熟悉。如果使用某些二进制协议(protocol)在节点之间进行通信,则必须 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"
,那么你会再次得到那些问号。
关于java - Base64 字符串到 Windows1251(西里尔字母符号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21624035/
我在数据库中有一个具有俄罗斯值(value)观的项目。我需要做的就是附和他们,但事实证明这比预期的要困难。所有俄语字符都只是作为问号打印。 IE: ??? ? ????????对于我尝试过的每种编码,
这是我解析 JSON 的函数: func jsonParsingWeather(urlPath:String) -> NSDictionary { var utf8URLPath = urlP
我是一名优秀的程序员,十分优秀!