C# UTF-8 base64 编码在 PHP 中无法正确解码

Posted

技术标签:

【中文标题】C# UTF-8 base64 编码在 PHP 中无法正确解码【英文标题】:C# UTF-8 base64 encoding doesn't decode correctly in PHP 【发布时间】:2019-03-05 16:35:16 【问题描述】:

所以我遇到了以下问题:我正在使用 UTF-8 将 C# 中的文件内容编码为 base64,然后对其进行 URL 编码并将 GET 请求发送到我的 php,然后我在那里对其进行 url 解码,然后进行 base64 解码它。无论如何,结果都不是我用 C# 编码的文件的 1:1。我已经尝试了 C# 中的所有编码,但它们都不起作用。我应该在这里做点别的吗?我还想提一下,我正在将文件回显到八位字节流中,也许 echo 不能“回显”UTF-8 字符?

这是我在 C# 中的 Base64 编码:

    public static string Base64Encode(string plainText)
    
         var plainTextBytes = Encoding.UTF8.GetBytes(plainText);
         string base64 = System.Convert.ToBase64String(plainTextBytes);
         return WebUtility.UrlEncode(base64);
    

这是我在 PHP 中的解码方法:

base64_decode(urldecode($_GET["parameter"]));

这是我下载它的方式:

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="<filename>"');
echo(base64_decode(urldecode($_GET["parameter"])));

谢谢。

【问题讨论】:

没有代码,没有帮助。 添加了代码。 是的,我刚刚解决了这个问题 - 仍然没有运气。 你有一个简短的失败案例吗? 谢谢,它工作正常,如果你留下答案,我会接受它作为解决方案。 【参考方案1】:

您可以简单地将文件读取为字节:

var fileBytes = File.ReadAllBytes(fileName);

然后把它转成base64:

var fileBytes = File.ReadAllBytes(fileName);
var base64 = Convert.ToBase64String(fileBytes);

【讨论】:

以上是关于C# UTF-8 base64 编码在 PHP 中无法正确解码的主要内容,如果未能解决你的问题,请参考以下文章

在 c# 中等效于在 c 编程中生成的要在 URL 查询字符串中发送的“Base64”编码的加密字节字符串

如何在 C# 中实现 Base64 URL 安全编码?

在 C# 中以 base64 编码的 XMLHttpRequest 调用 FastRPC

如何在Jmeter中编码附件到Base64?

在 PHP 中检测 base64 编码?

使用 c# 将 FileStream 编码为 base64