PHP base64 编码的响应在 Javascript 中无法正确解码


PHP base64 encoded response does not get decoded correctly in Javascript

美好的一天!我想知道为什么我不能使用 atob 或 btoa 或自定义公式(如 $.base64.decode())在 javascript 中解码 base64 响应。

这就是我在 php 中所拥有的

$res = "Это тескт";
echo base64_decode($res);

这就是我在jquery中所拥有的

$.ajax({
type: "GET",
url: "request.php",
success: function(data){
$('#elementid').html($.base64.decode(data));
//or $('#elementid').html(atob(data)); // it gives the same result as the above one.

在页面上,我看到以下内容

ЭÑо ÑеÑкÑ

Base64 编码数据如下所示

0K3RgtC+INGC0LXRgdC60YI=

如果我尝试使用从 BASE64 到 UTF-8 的不同 Web 工具进行解码,我会看到正确的结果,但没有使用上述函数在我的页面上看到。请指教。

更新:@logic单元感谢您的建议。我忘了提到生成的页面索引.php在标题中有以下内容

<?php
header('Content-Type: text/html; charset=utf-8');
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
...
</head>

我找到了问题的答案。似乎atob和btoa处理UTF-8编码很糟糕。

它在 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding 中描述"Unicode 问题"部分中的解决方案 2 对我来说效果很好。

解决方案 #2 – 使用 TypedArrays 和 UTF-8 重写 atob() 和 btoa()

听起来

像是页面上的字符编码问题。

确保您在 HTML 标头的元标记中指定了正确的编码类型。

http://www.w3.org/International/questions/qa-html-encoding-declarations