2

良い一日!javascript で、atob や btoa、または $.base64.decode() などのカスタム式を使用して 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-unit 提案に感謝します。結果のページ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>
4

2 に答える 2

0

ページの文字エンコードの問題のようです。

HTML ヘッドのメタ タグに正しいエンコーディング タイプが指定されていることを確認してください。

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

于 2013-10-03T14:48:50.617 に答える
0

質問に対する答えを見つけました。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() を書き直す

于 2013-10-07T10:41:20.010 に答える