• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:base64encodeでの文字化けについて)

base64encodeでの文字化けについて

このQ&Aのポイント
  • 先日、PHPとjavascriptのエンコードについて質問をしました。その後いろいろと試してみたところ、javascript上で日本語の文字列に対してbase64_encodeをして、base64_decodeをすると文字化けが起こりました。
  • 文字コードはUTF-8を使用しているのですが、他の文字コードで試してみても文字化けします。原因や対処方法がおわかりの方がいらっしゃれば、教えて下さい。
  • 結果は以下の通りです。 元の文字列:abcde12345あいうえお 変換後の文字列:abcde12345BDFHJ

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

バイナリデータではなく文字列ですか。 IE10以上なら、JavaScript組み込み関数にbtoa()、atob()というBASE64変換する関数(メソッド)がありますよ。 https://developer.mozilla.org/ja/docs/Web/API/window.btoa JavaScriptでUnicode文字列をBASE64に変換する場合は、概ね他のエンコード方式で変換してから改めてBASE64にしなければなりません。 たぶんJavaScriptの文字列はバイト単位ではなく、1文字ずつの扱いだから変換できないんでしょう。 MDNではencodeURIComponentとescapeの両方を使っていますが、片方だけで良いと思います。

tomtomoo
質問者

お礼

回答ありがとうございました。

tomtomoo
質問者

補足

最初の質問との関連がわかりづらくてすみません。 最終的な目的はバイナリのエンコード、デコードです。 前回の回答を参考にして作成ミスなどを疑い、原因の 切り分けをしていたのですが、その中でjavascriptで 日本語をエンコード、デコードして元の文字列に 戻らなかったので、疑問に思って今回の質問をさせて いただきました。 前回にひきつづき、わかりやすい回答をしていただき 大変助かりました。ありがとうございました。

その他の回答 (3)

  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.3

結局、PHPは関係ないということは分かったのですね。 はいはい、なるほど…。 説明は省きますが、そのサイトから「utf.js」もDLし、 以下の様に修正すればいいでしょう。それだけの事です。 …という感じで、抽象的な質問をするより 具体的なソースを張ったほうが解決は早いですよ。 <html> <head> <title>サンプル</title> <script type="text/JavaScript" src="utf.js"></script> <script type="text/JavaScript" src="base64.js"></script> </head> <body> <script type="text/javascript"> str = "abcde12345あいうえお"; encode_str = base64encode(utf16to8(str)); decode_str = utf8to16(base64decode(encode_str)); document.write("元の文字列:" + str + "<br>変換後の文字列:" + decode_str); </script> </body> </html>

tomtomoo
質問者

お礼

回答ありがとうございました。

tomtomoo
質問者

補足

回答で書いていただいた処理でうまくいきました。 最初の質問に戻りますが、PHPでエンコードしてjavascriptで デコードする場合も、同様にPHP側でUTF16からUTF8変換を してからエンコードすると解決するということになるでしょうか。 また最終的な目的はバイナリデータをエンコード、デコードする ことなので、バイナリでも同じようにいくかどうか、この辺りは また試してみたいと思います。 いずれにしても大きなヒントになりました。ありがとうございました。

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.2

base64.js が日本語に対応できてないようですね。

tomtomoo
質問者

お礼

回答ありがとうございました。 base64.jsでは日本語のエンコード、デコードは できないということですね。残念です。

回答No.1

base64は無関係ですね。 >変換後の文字列:abcde12345BDFHJ UNICODEの第一バイトが落ちているように見えます。 あ:UNICODE 0x3042 B:UNICODE 0x0042 い:UNICODE 0x3044 D:UNICODE 0x0044 う:UNICODE 0x3046 F:UNICODE 0x0046 え:UNICODE 0x3048 H:UNICODE 0x0048 お:UNICODE 0x304A J:UNICODE 0x004A

tomtomoo
質問者

お礼

回答ありがとうございました。 参考になりました。

関連するQ&A