
先日、PHPとjavascriptのエンコードについて質問をしました。
http://oshiete.goo.ne.jp/qa/8512040.html
その後いろいろと試してみたところ、javascript上で
日本語の文字列に対してbase64_encodeをして、
base64_decodeをすると文字化けが起こりました。
ソースは以下の通りです。
<html>
<head>
<title>サンプル</title>
<script type="text/JavaScript" src="base64.js"></script>
</head>
<body>
<script type="text/javascript">
<!--
str="abcde12345あいうえお";
encode_str=base64encode(str);
decode_str=base64decode(encode_str);
document.write("元の文字列:"+str+"<br>変換後の文字列:"+decode_str);
// -->
</script>
</body>
</html>
base64.jsは以下のサイトのものを使用しています。
http://www.onicos.com/staff/iz/amuse/javascript/ …
結果は以下の通りです。
元の文字列:abcde12345あいうえお
変換後の文字列:abcde12345BDFHJ
文字コードはUTF-8を使用しているのですが、他の文字コードで
試してみても文字化けします。
原因や対処方法がおわかりの方がいらっしゃれば、教えて下さい。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
バイナリデータではなく文字列ですか。
IE10以上なら、JavaScript組み込み関数にbtoa()、atob()というBASE64変換する関数(メソッド)がありますよ。
https://developer.mozilla.org/ja/docs/Web/API/wi …
JavaScriptでUnicode文字列をBASE64に変換する場合は、概ね他のエンコード方式で変換してから改めてBASE64にしなければなりません。
たぶんJavaScriptの文字列はバイト単位ではなく、1文字ずつの扱いだから変換できないんでしょう。
MDNではencodeURIComponentとescapeの両方を使っていますが、片方だけで良いと思います。
この回答への補足
最初の質問との関連がわかりづらくてすみません。
最終的な目的はバイナリのエンコード、デコードです。
前回の回答を参考にして作成ミスなどを疑い、原因の
切り分けをしていたのですが、その中でjavascriptで
日本語をエンコード、デコードして元の文字列に
戻らなかったので、疑問に思って今回の質問をさせて
いただきました。
前回にひきつづき、わかりやすい回答をしていただき
大変助かりました。ありがとうございました。
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>
この回答への補足
回答で書いていただいた処理でうまくいきました。
最初の質問に戻りますが、PHPでエンコードしてjavascriptで
デコードする場合も、同様にPHP側でUTF16からUTF8変換を
してからエンコードすると解決するということになるでしょうか。
また最終的な目的はバイナリデータをエンコード、デコードする
ことなので、バイナリでも同じようにいくかどうか、この辺りは
また試してみたいと思います。
いずれにしても大きなヒントになりました。ありがとうございました。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シャドウボックスとjQueryを共...
-
Base64に変換したHTMLの<script...
-
lightbox2 表示の不具合
-
jQueryの基本的なことについて...
-
日本語記述が出来ません(XML?)
-
<a href="#" …>の意味を教えて...
-
相対パスと絶対パスの速度
-
★★★メタ文字変換後、swfのロー...
-
IISでの302 Redirectページの作...
-
JavaScriptによる(連続)自動判定
-
JavaScriptについてご教授願い...
-
jQuery処理は、ページを読み込...
-
ハイパーリンクに下線を表示す...
-
JAVAでリンクボタンを作成して...
-
別ページのインラインフレーム...
-
cssにjavascriptを入れる?呼び...
-
リンク先のページのサイズ
-
JavaScript で指定した月日に別...
-
AjaxでDBから取得したデータを...
-
location.hrefを使ったインライ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サイトにアクセスした際、数秒...
-
<div>のタッチ状態を維持したま...
-
base64encodeでの文字化けについて
-
jquery ui.resizable 使い方
-
jQuery UIのdraggableについて
-
jqueryについて質問させてくだ...
-
重複する数字のカウントの仕方
-
Camera slideshowの使い方について
-
Lightboxがエラーになります。
-
jqueryについて(Lightboxとbxs...
-
よろしくお願いします。
-
JW Playerの"file"にURLに付け...
-
jQuery.lightpop.jsの動作について
-
crossSlideがうまく機能しない...
-
map とlightbox
-
Jqueryの干渉について
-
マスターページでのJavaScriopt...
-
マウスオーバーでリンク先サム...
-
SVGのmask要素について
-
jqueryのcolorboxを読込直後に...
おすすめ情報