JavaScriptで文字コード変換

(注)この記事は2015年3月18日に旧ブログに投稿したものです。今でも有効な内容かは不明・・・

とあるWebアプリっぽいもの?を今作っています。
その中でブラウザからサーバへテキストを送信する際、Shift_JIS文字コードで送る必要があったんですが、JavaScriptの内部文字コードUnicode(UTF-16)なので、変換が必要になりました。
参考:JavaScript中での文字列の扱い

(本来ならサーバ側で文字コード変換したかったんですけどねー・・・)

というわけで、JavaScriptでどうやってUnicodeからShift_JISに変換するのかなーと思って探ってみたんですが、単純には出来ないっぽいです。

その代わり、ステキなJavaScript文字コード変換ライブラリを見つけたので、これを使ってみることにします。
https://github.com/polygonplanet/encoding.js

参考にしたページはこちら。
http://qiita.com/weal/items/3b3ddfb8157047119554

280KBの超大作…!変換テーブル保持してたら、まぁそれくらいのサイズは行ってしまいますよね。

まず、入力した文字列()を文字コードの配列に変更します。

var unicodeText = "ほげぴよ"
var unicodeArray = str2Array(unicodeText);
function str2Array(str) {
    var array = [],i,il=str.length;
    for(i=0;i<il;i++) array.push(str.charCodeAt(i));
    return array;
}

encoding.jsのEncoding.convert();メソッドを使って変換。

var sjisArray = Encoding.convert(unicodeArray, 'SJIS', 'UNICODE');

sjisArrayにShift_JIS文字コードの配列が格納されました。
あとはURLエンコーディングをして、サーバに送ればOKです。

Encoding.urlEncode(sjisText)