我需要一个使用blob编码utf到8位cp1251或cp1252的解决方案
我设法改变了 https://github.com/b4stien/js-csv-encoding包括Windows 1251,但存在不可解决的问题:
不幸的是,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个字符的解决方案,而且我的知识还不够。 如果在其他脚本的帮助下有解决方案,例如,通过值表重新编码,这也可以是一个解决方案。
答案 0 :(得分:0)
我花了半天时间尝试用Windows-1251编码中的西里尔符号保存xml文件。原来这很简单 - 你只需要创建一个合适的字节数组。请参阅下面的示例(The full repo with this example):
import iconv from 'pika-iconv-lite';
import saveAs from 'save-as';
const byteArrayWin1251 = iconv.encode(
`<?xml version="1.0" encoding="windows-1251"?>
<note>
<to>Михаил</to>
<from>Андрей</from>
<heading>Reminder</heading>
<body>Вот такая вот xml! И сохранюсь я как win-1251</body>
</note>`,
'win1251'
);
const blob = new Blob([byteArrayWin1251], { type: 'application/xml;charset=windows-1251' })
saveAs(blob, 'myxml.xml');