JavaScript CSV-Text скачать в формате ANSI (Windows-1252)
Я пытаюсь создать загрузку CSV-файла с помощью Javascript.
Нам нужно экспортировать данные с нашего веб-сайта в стороннюю программу, создание и загрузка работают довольно хорошо. Есть только одна проблема, мне нужен CSV-файл, закодированный в ANSI (Windows-1252) - сторонняя программа очень старая и не может понимать многобайтовые кодировки. Мои файлы обслуживаются в UTF-8, и до сих пор я не нашел способа конвертировать Файл в ANSI, я всегда получаю UTF-8-Content...
Текущее исправление - открыть файл и вручную изменить кодировку на ANSI, но это нехорошо, и для некоторых в моей компании это трудно сделать (иногда они забывают об этом, потому что им не очень комфортно с ПК).
Я хочу файл, который готов использовать в ANSI, а не в UTF-8. Я могу конвертировать файл в PHP, он имеет правильную кодировку и содержимое, но у меня нет доступа на запись на сервере, поэтому мне нужно загрузить файл динамически с AJAX.
Я использовал решение, подобное ему, в Stackru: /questions/17912447/javascript-dlya-csv-eksportnoj-problemyi-kodirovki/17912464#17912464
Но я получаю UTF-8 в качестве контента.
Я сделал шаг назад и попытался конвертировать с помощью JavaScript на очень простую страницу, но я также получил UTF-8...:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
<title>My File-Download</title>
<script type='text/javascript' src='encoding.js'></script>
<script type='text/javascript' src='encoding-indexes.js'></script>
<script type='text/javascript' src='FileSaver.min.js'></script>
<script type='text/javascript'>
<!--
/**
* Downloads the Text as File
*
* @param {string} filename - Name of the File
* @param {string} text - Content of the File
*/
function downloadExportFile(filename, text) {
var encodedText = new TextEncoder("windows-1252", {NONSTANDARD_allowLegacyEncoding: true}).encode([text]);
var blob = new Blob([encodedText], {type: 'text/plain;charset=windows-1252;'});
saveAs(blob, filename);
}
// -->
</script>
</head>
<body>
<a href="#" onclick="downloadExportFile('export.csv', 'Dragicevic,Peter,,1,Straße 4,21027,Hamburg,43,,,,,,,,');">Download Windows-1252 CSV-File</a>
</body>
</html>
Я не нашел много о преобразовании UTF-8 в ANSI (но в другом направлении есть тонны решений). Кто-нибудь знал решение получить ANSI (Windows-1252) -файл с JavaScript?
1 ответ
Я надеюсь, что это помогает!
Polyfill для API кодирования Living Standard
Загрузите оба файла encoding-indexes.js и encoding.js
Пример HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
window.TextEncoder = window.TextDecoder = null;
</script>
<script type="text/javascript" src="encoding-indexes.js"></script>
<script type="text/javascript" src="encoding.js"></script>
<script>
function BlobDownload(Filename, Bytes, Mimetype) {
var filData = new Blob(Bytes, { type: Mimetype });
if (window.navigator && window.navigator.msSaveOrOpenBlob) { // for IE
window.navigator.msSaveOrOpenBlob(filData, Filename);
} else { // for Non-IE (chrome, firefox etc.)
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
var filUrl = URL.createObjectURL(filData);
a.href = filUrl;
a.download = Filename;
a.click();
a.remove();
}
};
function download() {
var bytes = new TextEncoder("windows-1252", { NONSTANDARD_allowLegacyEncoding: true }).encode("Eu não tenho mais dúvidas");
BlobDownload("test_windows1252_encoding.txt", [bytes]);
BlobDownload("test_windows1252_encoding.csv", [bytes], "text/csv");
}
</script>
</head>
<body>
<button onclick="download()">Download</button>
</body>
</html>