Добрый день! Интересно, почему я не могу декодировать ответ base64 в javascript, используя atob или btoa или настраиваемые формулы, такие как $ .base64.decode ().
Это то, что у меня есть в 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, я вижу правильный результат, но не на моей странице, используя вышеуказанные функции. Пожалуйста, предложите.
ОБНОВЛЕНИЕ: @ логическая единица благодарит за предложение. Я забыл упомянуть, что итоговая страница index.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 Solution 2 из раздела. Проблема «Unicode» работала хорошо для меня.
Решение № 2 – переписывание atob () и btoa () с использованием TypedArrays и UTF-8
Звучит как проблема кодирования символов на вашей странице.
Убедитесь, что в вашем HTML-заголовке указан правильный тип кодировки, указанный в метатеге.
http://www.w3.org/International/questions/qa-html-encoding-declarations