Node.js和Kakasi中的日语音译

时间:2017-10-30 16:36:21

标签: node.js transliteration cjk

我为Kakasi

写了一个小包装器

如下所示:

Kakasi.prototype.transliterate = function (data) {
            var self = this;
            return new Promise(function (resolve, reject) {

                var args;
                args = [
                    '-i',
                    'euc',
                    '-Ha',
                    '-Ka',
                    '-Ja',
                    '-Ea',
                    '-ka',
                    '-s',
                    '-iutf8',
                    '-outf8'
                ];
                var kakasi = spawn(self._options.bin, args, {});
                console.log( "echo \""+data+"\" | " + kakasi.spawnargs.join(' ') )
                args = [
                    data
                ];
                var echo = spawn('echo', args, {});

                echo.stdout.pipe( kakasi.stdin );
                var res='';
                kakasi.stdout.on('data', function(_data) {
                    var data=new Buffer(_data,'utf-8').toString();
                    res+=data;
                });
                kakasi.stdout.on('end', function(_) {
                    return resolve(res);
                });
                kakasi.on('error', function(error) {
                    return reject(error);
                });

                if (self._options.debug) kakasi.stdout.pipe(process.stdout);

            });
        }//transliterate

此代码基本上执行以下命令

echo "退屈であくびばっかしていた毎日" | kakasi -i euc -Ha -Ka -Ja -Ea -ka -s -iutf8 -outf8

输出taikutsu deakubibakkashiteita mainichi 问题是javascript缺少一些输出:

$ node transliterate.js 
echo "退屈であくびばっかしていた毎日" | kakasi -i euc -Ha -Ka -Ja -Ea -ka -s -iutf8 -outf8
----------
deakubibakkashiteita 

输入参数是相同的,但由于某种原因(编码?),子输出到stdout是不同的。

kakasi.js 代码可用here

0 个答案:

没有答案