DLL返回中文字符时出现node-ffi回调错误*

时间:2018-04-09 12:17:55

标签: node.js node-ffi

我有一个DLL,声明如下:

READIDCARD_API typedef void(*PIDDataCB)(char * pData);   

READIDCARD_API int initReadIdcard(PIDDataCB func);

DLL下载:the 32-bit dll file (google drive download)

dll文件运行良好,当使用QT加载它并转换数据时使用local8bit

我使用node.js和node-ffi加载它

const ffi = require('ffi');
const ref = require("ref");

let ReadIdcard = ffi.Library('./ReadIdcard.dll', {
  'initReadIdcard': ['int', ['pointer']]
});

let callback = ffi.Callback('void', ['string'],
  function(data) {
    console.log("data: ", data);
  });

console.log("registering the callback");
let z = ReadIdcard.initReadIdcard(callback);
console.log('done');

// Make an extra reference to the callback pointer to avoid GC
process.on('exit', function() {
  callback
});

我的环境:Windows7 64bit / Node.js 32位

运行代码, ˼ 是“抱歉”字符串之前的中文

enter image description here

我应该怎么做,或将其转换为正确显示,谢谢。

1 个答案:

答案 0 :(得分:0)

您应该使用正确的编码来记录字符串。 默认编码是utf8,但中文应该是utf16 / gb18030 / gbk / gb2312之一。