我需要使用 blob 将 utf 编码为 8 位 cp1251 或 cp1252 的解决方案
我设法更改了 包括 windows 1251 在内的https://github.com/b4stien/js-csv-encoding,但存在无法解决的问题:
不幸的是,noscript 不允许在关闭脚本的页面上加载外部 javascript。
因此,无法在书签中使用 js-csv-encoding 以及加载 jquery!禁用 noscript,尤其是在崩溃和幽灵之后,根本不安全。
因此,只剩下用原生 javascript 编写的小脚本版本。如果您找到另一种在关闭 noscript 的情况下运行 jquery 的方法,那么找到解决方案会更容易,尽管我怀疑它是否可能。
一个好的解决方案是 https://www.npmjs.com/package/windows-1251或https://www.npmjs.com/package/windows-1252 但是,将两字节文本转码为通过这些脚本的单字节文本。例如:
<script src="windows-1251.js"></script>
<script type="text/javascript">
function download(text, name, type) {
var a = document.getElementById("a");
var file = new Blob([text], {type: type});
a.href = URL.createObjectURL(file);
a.download = name;
</script>
已经有很多尝试使用 windows1251,例如这些:
<script type="text/javascript">
function exportToCsv() {
window.open(windows1251.encode('data:text/csv;charset=windows-1251,' +'текст'));
}
var button = document.getElementById('b');
button.addEventListener('click', exportToCsv);
</script>
<script type="text/javascript">
function exportToCsv() {window.open('data:text/csv;charset=windows-1251,' +windows1251.encode('текст'));}
var button = document.getElementById('b');
button.addEventListener('click', exportToCsv);
</script>
使用 windows-1251 的编码或解码不会将脚本转换为 8 位格式。在 js-csv-encoding 中,csvContentEncoded 用于转码:
尝试使用类似的东西失败了。也许你需要一些技巧,只是把 windows-1251 不够,因为 js 存储在 utf8 中,那么很可能你需要在最后添加到 1251 的转换。部分代码:js-csv-encoding。
var csvContent = 'текст',
textEncoder = new CustomTextEncoder('windows-1251', {NONSTANDARD_allowLegacyEncoding: true}),
fileName = 'some-data.csv';
var a = document.getElementById('download-csv');
a.addEventListener('click', function(e) {
var csvContentEncoded = textEncoder.encode([csvContent]);
var blob = new Blob([csvContentEncoded], {type: 'text/csv;charset=windows-1251;'});
saveAs(blob, fileName);
e.preventDefault();
});
我还尝试使用 charcode 进行转换,不是保存到服务器而是保存到计算机,因此使用 urlencode .. 不是正确的解决方案,因为在这种情况下,我必须将文本编码为可读的文本。
当然,很难找到一个不超过 4000-5000 个字符的小书签的解决方案,而且我的知识还不够。如果有借助其他脚本的解决方案,例如通过值表重新编码,这也可以是一个解决方案。