最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Node.js convert binary file to utf8 - Stack Overflow

programmeradmin4浏览0评论

I have a jrmxl (Jasper report) file stored in a postgresql database in a binary format (bytea). I'm trying to read that file and convert it into a plain jrmxl (XML) file and save it on the disk.

Here is what i've tried so far

var fs = require('fs');
exports.saveFile = function (pg) {
  //pg is the postgres connection to query the db
  pg.query('Select data from data_file where id = 123', function (err, result) {
    if (err) {
      console.log(err);
      return;
    }

    var data = result.rows[0].data;

    //Buffer.isBuffer(data) === true

    // I can get the data here. Now I try to convert it into text
    var file = data.toString('utf8');

    fs.writeFile('report.jrxml',file, function (er) {
      if (er) {
        console.log('an error occurred while saving the file');
        return;
      }
      console.log('file saved');
    }} 
  });
}

If i run the code above, the file is saved but it's somehow binary. How can i convert this to a plain xml file in text format that i can import in ireport for example?

I have a jrmxl (Jasper report) file stored in a postgresql database in a binary format (bytea). I'm trying to read that file and convert it into a plain jrmxl (XML) file and save it on the disk.

Here is what i've tried so far

var fs = require('fs');
exports.saveFile = function (pg) {
  //pg is the postgres connection to query the db
  pg.query('Select data from data_file where id = 123', function (err, result) {
    if (err) {
      console.log(err);
      return;
    }

    var data = result.rows[0].data;

    //Buffer.isBuffer(data) === true

    // I can get the data here. Now I try to convert it into text
    var file = data.toString('utf8');

    fs.writeFile('report.jrxml',file, function (er) {
      if (er) {
        console.log('an error occurred while saving the file');
        return;
      }
      console.log('file saved');
    }} 
  });
}

If i run the code above, the file is saved but it's somehow binary. How can i convert this to a plain xml file in text format that i can import in ireport for example?

Share edited May 25, 2015 at 6:02 Alex K 22.9k19 gold badges114 silver badges243 bronze badges asked Apr 27, 2015 at 17:28 diokeydiokey 1761 gold badge2 silver badges12 bronze badges 3
  • the third argument should be an object: fs.writeFile('path', file, {encoding: 'utf8'}, function...) – ndugger Commented Apr 27, 2015 at 17:33
  • Thanks for the ment, i just tried that, but the same problem remained. – diokey Commented Apr 27, 2015 at 17:38
  • Not a jasper-reports question, someone please remove the tag. – zellers Commented Dec 8, 2022 at 1:56
Add a ment  | 

2 Answers 2

Reset to default 2

You might try going through a buffer first. I have used this technique to transform DB BLOBs into base64 strings.

var fileBuffer = new Buffer( result.rows[0].data, 'binary' );
var file = fileBuffer.toString('utf8');

I use 'pako' npm package to resolve that issue:

import { connection, Message } from 'websocket';
import * as pako from 'pako';

protected async onCustomMessage(message: Message, con): Promise<void> {
    let data;
    let text;
    if (message.type === 'utf8') {
      // console.log("Received UTF8: '" + message.utf8Data + "'");
      text = message.utf8Data;
      data = JSON.parse(text);
    } else {
      const binary = message.binaryData;

      text = pako.inflate(binary, {
        to: 'string',
      });
      data = JSON.parse(text);
    }
}

npm i pako && npm i -D @types/pako

发布评论

评论列表(0)

  1. 暂无评论