Base64转UTF-8字符串解码-阿拉伯文本

3

我正在尝试解码一个包含英文和阿拉伯字符混合的Base64数据。我使用以下代码进行解码。

var bytes = Convert.FromBase64String(data); //data contains base64 data
string text = Encoding.UTF8.GetString(bytes);

在解码后,我会把它显示在ASP页面上。我的问题是,在英文文本中,能够正常显示,而在阿拉伯文本的位置,我看到的是空方块和问号,像这样。����� ���
请建议我在哪里出了问题。

1
请确保该字符串首先从UTF8转换为64。如果它是从CP1256或任何其他编码转换为Base 64,则必须使用它来获取字符串。我认为这就是问题所在。 - ahmedsafan86
4个回答

4

经过几天的搜索,我找到了以下内容并且已经可以使用。

byte[] plain = Convert.FromBase64String(data);
Encoding iso = Encoding.GetEncoding("ISO-8859-6");
newData = iso.GetString(plain);
return newData;

1

您应该在调试器下运行此程序,查看 string text 中是否得到正确的阿拉伯文本:

  • 如果text不正确,则字节(经过Base64解码后)未以UTF-8编码,而是其他编码方式,如UTF-16、Windows-1256等。
  • 如果text正确,但在ASP.NET页面上显示时出现损坏。在这种情况下,您应将页面的编码设置为支持阿拉伯语的编码方式,最好选择UTF-8,正如Shekhar所建议的那样。

0

试一下这个

    byte[] dec1_byte = Base64.decodeBase64(data.getBytes());
    String dec1 = new String(dec1_byte);
    byte[] newBytes = Base64.encodeBase64(dec1_byte);
    String newStr = new String(newBytes);

希望这个能够有效。

这是Java代码,甚至在那里也无法工作,因为它依赖于平台默认编码。 - Esailija

0

尝试在显示阿拉伯字符的页面中使用编码

<%@ Page RequestEncoding="utf-8" ResponseEncoding="utf-8" %>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接