[javascript] base64 エンコードしたい

画像などのバイナリデータや日本語の文字列をhttpで送るときに、
base64 にする話。
私は UTF-8 の文字列をXML の中に入れて送りたかったんだけど、
それで base64 したかったのね。

いろいろ実装している人がいるけど、
最近の Firefox なら btoa をそのまま使えばOK。
最初こんな風にしてみた。
window.btoa("あ");

でもこれだとこんな例外が発生する。
uncaught exception:
[Exception... "String contains an invalid character"
code: "5" nsresult: "0x80530005 (NS_ERROR_DOM_INVALID_CHARACTER_ERR)"
location: "javascript:%20window.btoa("%E3%81%82");
Line: 1"]


なんでやねん?
と思ったら、ここに理由が書いてあった。
さすが dankogai。
javascript - Yet Another Base64 transcoder
(404 Blog Not Found)
引数に/[^\x00-\xFF]/な文字が入っているとUncaught Exceptionになる


へぇ。
そこで、こうしてみたら成功。
window.btoa("¥xE3¥x81¥x82");
→ 44GC


そうだったのか。
じゃ btoa は、
UTF-8 の文字を「1バイトずつ」じゃなくて「1文字ずつ」読んでるんだな。
気が利かないのう…。

なわけで、困ったら、上記 dankogai 謹製の utob をかませるとか、
同じく謹製の Base64.encode(str) ってやるといいよ!
[PR]
by xiaoxia | 2008-07-10 12:23 | プログラム言語 | Comments(0)

ダメ女プログラマ&主婦&腐女子&バイオリン弾き


by 小霞