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)