<!DOCTYPE html> <html> <head> <meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport"> <meta charset="UTF-8"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.1/css/bootstrap.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.8/FileSaver.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/encoding-japanese/1.0.29/encoding.min.js"></script> <script> var str2array = function(str) { var array = [],i,il=str.length; for(i=0;i<il;i++) array.push(str.charCodeAt(i)); return array; }; function test() { // テキストエリアのテキストを取得 var text = document.getElementById("text").value; // lf のみを crlf に変換 text = text.replace(/\n/g, '\r\n'); // 文字コード配列に変換する( 関数 ) var array = str2array( text ); // SHIFT_JIS に変換する( ライブラリ ) var sjis_array = Encoding.convert(array, "SJIS", "UNICODE"); // JavaScript API で オブジェクトを作成 var sjis_data = new Uint8Array(sjis_array); // 保存用ファイル名 filename = "保存用テキスト.txt"; // 保存処理( saveAs はライブラリ、Blob は JavaScript API ) saveAs( new Blob( [sjis_data] , {type: "text/plain;charset=shift_jis"} ) , filename ); } </script> </head> <body> <h1>ファイルの書き込み</h1> <input type="button" id="btn" value="保存" onclick="test()"> <div> <textarea id="text" style='width:90%;height:400px;'></textarea> </div> </body> </html>
ファイルの書き込みに必要なライブラリ 1) FileSaver.js 2) encoding.js 補助する関数 str2arrayvar str2array = function(str) { var array = [],i,il=str.length; for(i=0;i<il;i++) array.push(str.charCodeAt(i)); return array; };※ この関数の定義方法は、無名関数を変数に代入して行っています 処理の整備処理の内容は複雑ですが、ファイルを保存するには他の記述方法はないので、まとめて .js ライブラリとして作成して関数を呼ぶだけの処理にする必要があります また、選択するキャラクタセットとして SHIFT_JIS 以外に UTF-8 をコンボボックスで選択できるようにする必要があります。 その際のキャラクタセットの文字列は、UTF-8 は "UTF8" としますあまり変更する部分はありませんが、jQuery による記述に変更します。 そして、さらに jQuery のプラグインとして改造します。encoding.js を使用すると、キャラクタセットの自動判定もできるので、ファイルの読込みで使用できると思います