文字コード変換ライブラリを JavaScript で作りました。
文字列ではなく配列 or TypedArray で処理します。
こないだの 「JavaScriptだけでzipファイルの解凍 - Unzipper.js」が
SJIS ファイルとかだと表示で文字化けするので、ついつい。。
動作確認は、zip ファイル解凍のデモページでわかると思います。
zip の中に SJIS や EUC-JP のファイル (ファイル名) がある場合でも
UTF-8 表示で化けなければ問題なしです。
↑のデモページを開いて、デスクトップなどから zip ファイルをドロップすると
解凍して結果のテキストを表示します。
※ JavaScript だけで動いていて、どっかのサーバなどに送信したり保存したりしてません
今回はぜんぶ同期で書いちゃったのですが、
バイナリファイルとかが対象だとちょっと重たくなりがち。。
気が向いたら非同期も可能にしてみたいです。
あと、Unzipper.js と同じレポジトリにしちゃったけど
これもできれば別にしたいところ。
追記→ 作りました
使い方:
サンプル:
その他、なにか問題等あれば
コメントやメールまたは @polygon_planet まで送っていただけるとうれしいです。
文字列ではなく配列 or TypedArray で処理します。
追記
↓動作サンプルを作りました
文字コード変換 動作サンプル
Unicode の変換が可能になりました。
文字コード配列から URLエンコード/デコード が可能になりました。
あと説明とサンプルも少し載せました。。(説明不足でごめんなさい)
文字コード変換 動作サンプル
Unicode の変換が可能になりました。
文字コード配列から URLエンコード/デコード が可能になりました。
あと説明とサンプルも少し載せました。。(説明不足でごめんなさい)
こないだの 「JavaScriptだけでzipファイルの解凍 - Unzipper.js」が
SJIS ファイルとかだと表示で文字化けするので、ついつい。。
動作確認は、zip ファイル解凍のデモページでわかると思います。
zip の中に SJIS や EUC-JP のファイル (ファイル名) がある場合でも
UTF-8 表示で化けなければ問題なしです。
↑のデモページを開いて、デスクトップなどから zip ファイルをドロップすると
解凍して結果のテキストを表示します。
※ JavaScript だけで動いていて、どっかのサーバなどに送信したり保存したりしてません
今回はぜんぶ同期で書いちゃったのですが、
バイナリファイルとかが対象だとちょっと重たくなりがち。。
気が向いたら非同期も可能にしてみたいです。
あと、Unzipper.js と同じレポジトリにしちゃったけど
これもできれば別にしたいところ。
追記→ 作りました
使い方:
// <script src="encoding.js"></script> // // Encoding というオブジェクトがグローバルに定義されます // 配列に対して変換または判別します // 文字コード変換 var utf8Array = new Uint8Array(...) or [...] or Array(...); var sjisArray = Encoding.convert(utf8Array, 'SJIS', 'UTF8'); // 文字コード自動判別で変換 var sjisArray = Encoding.convert(utf8Array, 'SJIS'); // or var sjisArray = Encoding.convert(utf8Array, 'SJIS', 'AUTO'); // 文字コード判別 (戻り値は下の「共通の文字コード値」のいずれか) var encoding = Encoding.detect(utf8Array); if (encoding === 'UTF8') { alert('UTF8です'); } // 特定の文字コードかどうか判別 var isSJIS = Encoding.detect(sjisArray, 'SJIS'); if (isSJIS) { alert('SJISです'); } // convert, detect 共通の文字コード値: // - 'UTF32' (detect only) // - 'UTF16' (detect only) // - 'BINARY' (detect only) // - 'ASCII' (detect only) // - 'JIS' // - 'UTF8' // - 'EUCJP' // - 'SJIS' // - 'UNICODE' (JavaScript Unicode String/Array) // // ※ (detect only) は Encoding.detect() でのみ有効 (変換はできない) // ※ 'UNICODE' は JavaScript の Unicode コード値 (0xFF 以上の数値になりえる) //
サンプル:
// EUCJPの文字コード配列 (中身は 'こんにちは、ほげ☆ぴよ') var eucjpArray = [ 164, 179, 164, 243, 164, 203, 164, 193, 164, 207, 161, 162, 164, 219, 164, 178, 161, 249, 164, 212, 164, 232 ]; // UTF-8に変換 var utf8Array = Encoding.convert(eucjpArray, 'UTF8', 'EUCJP'); console.log( utf8Array ); // output: [ // 227, 129, 147, 227, 130, 147, 227, 129, 171, // 227, 129, 161, 227, 129, 175, 227, 128, 129, // 227, 129, 187, 227, 129, 146, 226, 152, 134, // 227, 129, 180, 227, 130, 136 // ] // => 'こんにちは、ほげ☆ぴよ' // --------------------------------------------- // 文字コード自動判別で変換 // // SJISの文字コード配列 (中身は 'こんにちは、ほげ☆ぴよ') var sjisArray = [ 130, 177, 130, 241, 130, 201, 130, 191, 130, 205, 129, 65, 130, 217, 130, 176, 129, 153, 130, 210, 130, 230 ]; // Unicodeに変換 var unicodeArray = Encoding.convert(sjisArray, 'UNICODE', 'AUTO'); // 文字列にして表示 // codeToStringは、文字コード配列を文字列に変換(連結)して返す関数 console.log( Encoding.codeToString(unicodeArray) ); // // output: 'こんにちは、ほげ☆ぴよ' // // --------------------------------------------- // 文字コードの配列をURLエンコード/デコード var sjisArray = [ 130, 177, 130, 241, 130, 201, 130, 191, 130, 205, 129, 65, 130, 217, 130, 176, 129, 153, 130, 210, 130, 230 ]; var encoded = Encoding.urlEncode(sjisArray); console.log(encoded); // output: // '%82%B1%82%F1%82%C9%82%BF%82%CD%81A%82%D9%82%B0%81%99%82%D2%82%E6' var decoded = Encoding.urlDecode(encoded); console.log(decoded); // output: [ // 130, 177, 130, 241, 130, 201, 130, 191, 130, 205, 129, // 65, 130, 217, 130, 176, 129, 153, 130, 210, 130, 230 // ]
ダウンロード
レポジトリ
その他、なにか問題等あれば
コメントやメールまたは @polygon_planet まで送っていただけるとうれしいです。