Ваша Encoding
библиотека в настоящее время возвращает DOMString, потому что вы передали такую DOMString в качестве ввода.
Это означает, что ваш Blob
конструктор преобразует эту DOMString в UTF-8, и это то, что вы будете иметь в Ваш файл: версия UTF-8 представления в кодировке Shift-JIS в формате UTF-16.
Можно сказать, что это не то, что вам нужно.
Быстрый просмотр документов этой библиотеки Похоже, что лучше всего было бы передать версию ArrayBuffer вашего текста для кодирования, чтобы он возвращал вам массив значений байтов (например, Uint8Array, за исключением того, что по каким-либо причинам они используют обычный массив).
Затем из этого массива байтов вы сможете сгенерировать новый массив ArrayBuffer, который вы сможете передать своему BLOB-объекту без преобразования его обратно в UTF-8.
const csv = Papa.unparse({
"fields": ["行形式","取引番号","取引日","支払期限","顧客番号","顧客企業名","顧客電話番号","送付先郵便番号","請求書発行日","郵送","メール送付","取引金額","明細","単価","数量","金額","消費税率","税込対象額_10%","税込対象額_8%","税込対象額_経8%","税込対象額_旧8%","税込対象額_非","税込対象額_対象外"],
"data": [
["取引","transaction-20200218-094750_1","2020/02/18","2020/03/31","DP79","Sample1Corp","03-0000-0000","123-4567","2020/02/19","0","1","110","","","","","","110","","","",""]
]
});
// First convert our DOMString to an ArrayBuffer
const utf8Array = new TextEncoder().encode( csv );
// pass it to Encoding so we get back an Array of bytes
const sjisArray = Encoding.convert(utf8Array, 'SJIS', 'UTF8');
// now we can make our Blob without auto encoding
const blob = new Blob( [ new Uint8Array( sjisArray ) ] );
const a = document.createElement('a');
a.download = 'Shift-JIS.csv';
a.href = URL.createObjectURL( blob );
a.textContent = 'download';
document.body.append( a );
// just to check we encoded it correctly
readAsText( blob, 'Shift-JIS' )
.then( txt => console.log( 'read back as Shift-JIS:', txt ) );
readAsText( blob, 'utf-8' )
.then( txt => console.log( 'read back as UTF-8:', txt ) );
function readAsText( blob, encoding ) {
return new Promise( (res, rej) => {
const reader = new FileReader();
reader.onerror = rej;
reader.onload = (evt) => res( reader.result );
reader.readAsText( blob, encoding );
} );
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/PapaParse/5.1.0/papaparse.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/encoding-japanese/1.0.30/encoding.min.js"></script>