【问题标题】:Base64.getDecoder().decode in C#C# 中的 Base64.getDecoder().decode
【发布时间】:2019-03-05 09:12:20
【问题描述】:

我需要Base64.getDecoder().decode Java 代码的等效 C# 代码。 我在 C# 中尝试过类似以下的内容

byte[] decodedBytes = Convert.FromBase64String(embedCode);
string decodedText = Encoding.UTF8.GetString(decodedBytes);
byte[] bytes = Encoding.ASCII.GetBytes(decodedText);

但字符串有一些特殊字符,例如 0��\u0002B\0�*-\u0017���c\u001e�aֺ]���qr����`。如何在 C# 中实现这一点

【问题讨论】:

  • "如何在 C# 中实现这一点":源数据实际上是 Java 中的字符串吗?您不能对任意二进制数据使用 文本编码(例如 UTF8)。继续往下看,字符串是用 Java 编码的 UTF8 吗?
  • 您的代码对于 Base64 编码的 UTF8 字节是正确的。所以你对输入数据的假设是错误的。
  • 那么 Java 代码所做的不仅仅是只是调用Base64.getDecoder().decode,因为 C# 代码的第 1 行正是要执行该操作。
  • 好吧,验证所有步骤。首先检查 base64 输入(长度、第一个和最后一个字符)。它们应该是相同的 n Java 和 C#。然后比较byte[]的长度等等。
  • 如果您只需要您所说的等效代码,请从您的问题中删除最后两行代码并使用返回的字节数组。

标签: c# base64 decode


【解决方案1】:

'\u0002' 是 unicode 编码的“文本开头”字符。

所以用

byte[] decodedBytes = Convert.FromBase64String(embedCode);
string decodedText = Encoding.Unicode.GetString(decodedBytes);

请不要尝试将 Unicode 文本编码为 ASCII,Unicode 的字符范围更广,ASCII 将无法识别。所以再次使用 unicode 编码来写入字节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多