Node.js ékezetes szövegbevitel konzolból / parancssorból

2013-06-27 07:41:54
Címkék: stdin , process , nodejs , konzol , input

A probléma

Node.js scriptjeim írásakor gyakran tartok igényt on-demand debugra, azaz, ha a script célja alapvetően nem a konzolos interakció, akkor is dolgozzon fel olyan parancsokat, amikkel debug infókat tudok belőle kinyerni (pl. egy torrent trackernél érdekel, hogy éppen milyen torrenteket és peereket tart nyilván). Erre eddig a process.stdin.resume() és társait használtam, valahogy így:


Teljes bejegyzés
process.stdin.resume();
process.stdin.setEncoding('utf8');

process.stdin.on('data', function(data) {
    console.log(data);
    console.log(new Buffer(data));
});

Ezzel remekül lehet normál parancsokat olvasgatni stdin-ről és aszerint cselekedni.

C:\nodejs>node "test01-process.stdin.js"
helo
helo

<Buffer 68 65 6c 6f 0d 0a>

A probléma akkor van, ha ékezetet is írunk:

C:\nodejs>node "test01-process.stdin.js"
ez: íéáűőúöüó
ez: ���������

<Buffer 65 7a 3a 20 ef bf bd ef bf bd ef bf bd ef bf bd ef bf bd ef bf bd ef bf bd ef bf bd ef bf bd 0d 0a>

Ugye ez nem tekinthető feldolgozható bemenetnek, az összes ékezetes betű ef bf bd kódként jelenik meg, még csak konvertálni sem lehet.

Próbáljunk néhány másik encoding típust: process.stdin.setEncoding('ascii');

Az eredmény sajnos változatlanul rossz.

Második próbálkozás: process.stdin.setEncoding('binary');

C:\nodejs>node "test01-process.stdin.js"
íéáűőúöüó
¡‚ û‹£”¢

<Buffer c2 a1 c2 82 c2 a0 c3 bb c2 8b c2 a3 c2 94 c2 81 c2 a2 0d 0a>

Itt már van egy részeredmény: a karakterek ugyan rosszak, de legalább már mindegyik más kódot kap, konvertálásra végülis alkalmas.

De olyan nincs, hogy 2013-at írunk, és egy dinamikusan fejlődő scriptmotorral nem lehetséges normálisan ékezetes karaktereket olvasni. Nonszensz. További kutatásra van szükség.

A megoldás

A stackoverflow.com-on találtam egy másik részmegoldást a következő kódrészlet formájában:

var readline = require('readline');

var rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal: false
});

rl.on('line', function (data) {
    console.log(data);
    console.log(new Buffer(data));
});

Az eredmény sajnos szintén elkeserítő:

C:\nodejs>node "test02-readline.js"
123 éáű
123 ���

<Buffer 31 32 33 20 ef bf bd ef bf bd ef bf bd 0d 0a>

Viszont a dokumentációt elolvasva az alábbi kapcsoló segíthet nekünk:

terminal - pass true if the input and output streams should be treated like a TTY, and have ANSI/VT100 escape codes written to it. Defaults to checking isTTY on the output stream upon instantiation.

Tehát, próbáljuk ki így:

    ...
    terminal: true
    ...

Ó igen, a script végre az elvárt eredményt szolgáltatja.

C:\nodejs>node "test02-readline.js"
123 éáű
123 éáű
<Buffer 31 32 33 20 c3 a9 c3 a1 c5 b1>

Node.js lazy hibakezelés

2013-08-19 22:08:35
Címkék: process , nodejs

Ha node.js.ben írt programunk több modulra támaszkodik, akkor bármelyik hibája (pl. http timeout, api változás miatt hibás visszatérés, regexp nem-illeszkedés miatti üres paraméterek, stb) képes a program futását leállítani. Erre - elég lusta - megoldás a következő kódsor:

process.on('uncaughtException', function (err) {
    console.log(err);
});


Olcsó asztali órás rádió Androidból

2017-04-14 22:36:00
14

Konzol kimenet színezés

2017-01-06 13:08:37
0

Windows Event Log bedolgozás MSSQL adatbázisba [update 1]

2015-04-30 22:23:52
0

Az internetadó margójára

2014-11-01 10:39:57
0

A C4nn0N logó

2014-07-26 20:50:32
0

Virtualizálás Xen 4.4-gyel Ubuntu 14.04 alatt (64 bit)

2014-04-30 09:46:38
1

Xen és XenServer előadás

2014-04-17 06:11:00
0

HLDS-V8: Javascripttel programozható HLDS (CS 1.6)

2014-03-15 09:33:53
0

Node.js lazy hibakezelés

2013-08-19 22:08:35
0

Office 2013 animáció kikapcsolása

2013-07-02 08:31:35
1

Node.js ékezetes szövegbevitel konzolból / parancssorból

2013-06-27 07:41:54
0

Egy Counter Strike szerver üzemeltetési tapasztalatai

2013-05-17 14:21:14
7

Hogyan tegyünk grafikus felületet Ubuntu 10.04 Serverre?

2013-05-07 08:19:05
2

Torrent tracker node.js-ben 65 sorban

2013-04-28 10:23:25
0

Hányadik vagyok a Google-ben?

2013-04-24 09:09:01
0

Virtualizálás Xen 4.1-gyel Ubuntu 12.04 alatt (64 bit)

2013-01-22 08:58:15
2

Cloud Backup - Ments a felhőbe

2012-05-02 21:46:13
0

VIP plugin CS 1.6-hoz

2012-04-22 16:35:07
7

Ki az az admin?

2012-03-17 23:45:04
0

Csináltam egy blogot

2011-12-09 15:32:11
2

Az IT szabályozásokról

2009-09-01 17:30:58
0

Twitter - IRC gateway, avagy hogyan twitteljünk irc protokollon

2009-06-05 09:51:47
0

Hogyan lehet blokkolhatatlan hirdetéseket elhelyezni egy weblapon?

2008-10-28 10:56:30
11

Virtualizálás Xen-nel Ubuntu 8.04.1 Server-en

2008-09-04 18:46:02
0

Hogyan tegyünk grafikus felületet Ubuntu 8.04 Serverre?

2008-05-19 20:02:29
0

FAR Manager kedvcsináló I.

2008-05-02 11:41:02
0

Far Manager 1.80 - Open Source

2008-01-04 21:11:19
0

IBM DB2 9.5 Express install Ubuntu 7.10 Serverre

2007-12-19 10:35:03
0

IBM Websphere Application Server 6.1.0.3 Express és WAS Plugin install Ubuntu 7.10 Serverre

2007-12-19 10:33:27
0

Hogyan tegyünk grafikus felületet Ubuntu 7.10 Serverre?

2007-12-11 22:00:17
0

Warezolás, gazemberség?

2007-11-20 21:01:00
0

iSCSI Target és Initiator installálása Ubuntu 6.06.1 LTS-re

2007-10-13 18:23:40
0

Oracle 11g R1 install Ubuntu 6.06.1-re

2007-08-18 14:13:04
0

How to install Oracle 11g R1 on Ubuntu 6.06.1 LTS

2007-08-18 14:13:04
0

Hogyan tegyünk grafikus felületet Ubuntu 6.06.1 Serverre?

2007-08-18 14:09:55
0

Apache2 - WebDAV - Ubuntu 6.06.1 - Windows XP kliens

2007-08-13 19:48:34
0

CVS beállítása Ubuntu 6.06.1-re

2007-05-21 19:39:32
0

IBM DB2 8.2 Express install Debian 4.0-ra (64 bit)

2007-05-15 20:21:33
0

IBM DB2 8.2 Express install Ubuntu 6.06.1-re

2007-05-09 20:47:34
0

Lemez olvasási/írási sebesség tesztelés linux alatt

2007-05-05 20:14:30
0

Oracle Applications tippek 1.

2007-05-03 20:47:55
0

Windows Event Log bedolgozás MSSQL adatbázisba

2007-04-30 21:06:33
0

Oracle tippek 1.

2007-04-30 17:20:25
0

MySQL automatikus backup készítés jelszó felfedése nélkül

2007-04-18 23:42:51
0

LVM - logikai lemezkezelés (skicc)

2007-04-15 19:28:33
0

Counter Strike 1.6 telepítése Ubuntu 6.06.1-re

2007-04-08 12:15:32
0