現在、クライアント側 JavaScript の文字エンコーディングに問題があります。私の基本的なプログラム フローは次のとおりです。クライアント側の JavaScript は、気の利いた FileReader を使用してローカルのテキスト ファイルを読み取ります。次に、文字列に対して一連の編集を行い、ユーザーが新しい変更されたファイルをダウンロードする方法を提供しようとします。これが私の問題です。私が読んでいるファイルは(メモ帳++によると)ANSIでエンコードされており、書き込みたいファイルもANSIでエンコードする必要があります。
次のようにファイルから読み込もうとすると:
reader.readAsText(this.files[0], "ANSI");
...
cachedFile = e.target.result.split("\n");
console.log(cachedFile[179544]);
私の結果は、次のようなものです (Î 文字が正しく読み取られません)。
name="�le-de-France"
ただし、ISO-8859-1 をエンコード パラメーターとして使用すると (完全にランダムな選択)、何らかの理由で結果は正しいです。
name="Île-de-France"
そのため、何が起こっているのか分からない可能性が非常に高いです。そこで、ISO-8859-1 エンコーディングのままにして、さまざまな編集を行い、ダウンロードの準備を試みました。率直に言って、このファイルはかなり大きい (~14 MB) ため、単純にこれを圧縮せずにサーバーに POST してダウンロード用のファイルを準備することはできません。ただし、プレーンテキストであるため、非常にうまく圧縮されます。問題は、私が見つけたすべての JavaScript 圧縮ライブラリ (ファイルを生成して .zip に貼り付けることができる jszip など) は、JavaScript の内部文字列エンコーディングを維持しているように見えることです。.zip ファイルも base64 としてエンコードされています (PHP サーバーでデコードしたばかりです)。もちろん、これを行うと、次のような最終結果が得られます。
name="ÃŽle-de-France"
ここに私の問題があります.ANSIでエンコードされたファイルがあり、ISO-8859-1を使用して解析し、UTF-16で編集しています.ANSIに戻し、人のデスクトップに戻す方法を見つける必要があります. JavaScript 文字列を圧縮する前に ANSI に変換して、圧縮ファイルをユーザーに提供してダウンロードさせる標準的な方法はありますか? または、PHP を使用してサーバー側で文字列を圧縮解除し、ANSI に変換してから、ダウンロード用に提供する方法はありますか? 参考までに、私の現在の PHP コードは次のとおりです。
<?php
$res = $_POST["saveString"];
$maybe = base64_decode($res);
header('Content-Type: application/download');
header('Content-Disposition: attachment; filename="genSave.zip"');
header("Content-Length: " . strlen($maybe));
echo $maybe;
?>