ANSI(Windows-1252)中的JavaScript CSV文本下载
我尝试使用Javascript创建CSV文件下载 我们需要将数据从我们的网站导出到第三方程序,创建和下载工作非常顺利。只有一个问题,我需要用ANSI(Windows-1252)编码的CSV文件-第三方程序非常旧,无法理解多字节编码。我的文件是以UTF-8格式提供的,直到现在我还没有找到将文件转换为ANSI的方法,我总是得到UTF-8-Content 当前的修补程序是打开文件并手动将编码更改为ANSI,但这并不好,而且对于我公司的一些人来说很难做到(有时他们会忘记这一点,因为他们对PC不太适应) 我想要一个可以在ANSI中使用的文件,而不是UTF-8。我可以用PHP转换文件,它有正确的编码和内容,但我在服务器上没有写权限,这就是为什么我需要用AJAX动态下载文件 我在Stackoverflow上使用了类似他的解决方案: 但我得到了UTF-8作为内容 我退了一步,尝试在一个非常简单的页面上使用JavaScript进行转换,但我也得到了UTF-8…:ANSI(Windows-1252)中的JavaScript CSV文本下载,javascript,encoding,utf-8,character-encoding,windows-1252,Javascript,Encoding,Utf 8,Character Encoding,Windows 1252,我尝试使用Javascript创建CSV文件下载 我们需要将数据从我们的网站导出到第三方程序,创建和下载工作非常顺利。只有一个问题,我需要用ANSI(Windows-1252)编码的CSV文件-第三方程序非常旧,无法理解多字节编码。我的文件是以UTF-8格式提供的,直到现在我还没有找到将文件转换为ANSI的方法,我总是得到UTF-8-Content 当前的修补程序是打开文件并手动将编码更改为ANSI,但这并不好,而且对于我公司的一些人来说很难做到(有时他们会忘记这一点,因为他们对PC不太适应)
<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的信息(但在另一个方向上有大量的解决方案)。有人知道用JavaScript获取ANSI(Windows-1252)文件的解决方案吗?我希望它能有所帮助
下载encoding-index.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>
window.TextEncoder=window.TextDecoder=null;
函数BlobDownload(文件名、字节、Mimetype){
var filData=newblob(字节,{type:Mimetype});
if(window.navigator&&window.navigator.msSaveOrOpenBlob){//for IE
window.navigator.msSaveOrOpenBlob(filData,文件名);
}else{//对于非IE(chrome、firefox等)
var a=document.createElement(“a”);
文件.正文.附件(a);
a、 style=“显示:无”;
var filUrl=URL.createObjectURL(filData);
a、 href=filUrl;
a、 下载=文件名;
a、 单击();
a、 删除();
}
};
函数下载(){
var bytes=新的文本编码器(“windows-1252”,{NONSTANDARD_allowLegacyEncoding:true}).encode(“Eu não tenho mais dúvidas”);
BlobDownload(“test_windows1252_encoding.txt,[bytes]);
BlobDownload(“test_windows1252_encoding.csv”,[字节],“text/csv”);
}
下载
JavaScript没有本机转换函数;您绝对需要一个第三方库,这里的库建议显然与主题无关。不管怎样,由于您在浏览器中,您必须坚持使用纯JavaScript实现,但除了性能之外,还有一些可供选择,例如or。