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”编码的加密字节字符串