diff --git a/ChangeLog b/ChangeLog index 59e0646d..d1867aba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -62,6 +62,8 @@ disabled in browsers. * Added appcache paramter to config.json +* Added ability convert charset from win to unicode on win32. + 2012.08.24, Version 0.1.6 diff --git a/lib/server/socket.js b/lib/server/socket.js index 4384b006..cbfb63fe 100644 --- a/lib/server/socket.js +++ b/lib/server/socket.js @@ -3,7 +3,6 @@ var io = require('socket.io'), exec = require('child_process').exec, Socket = {}, - charset = require('lib/charset'), Win32_b = false; if(process.platform === 'win32') @@ -41,14 +40,14 @@ exports.listen = function(pServer){ function getExec(error, stdout, stderr) { if(stdout){ if(Win32_b) - stdout = charset.win2unicode(stdout); + stdout = win2unicode(stdout); console.log(stdout); Socket.send(stdout); } if(stderr){ if(Win32_b) - stderr = charset.win2unicode(stderr); + stderr = win2unicode(stderr); console.log('stderr: ' + stderr); Socket.send(stderr); @@ -57,4 +56,31 @@ function getExec(error, stdout, stderr) { if (error !== null) { console.log('exec error: ' + error); } -} \ No newline at end of file +} + + +/** + * Windows-1251 to Unicode converter + * Useful when having to use GET query parameters. + * e.g. unescaped "%F2%E5%EA%F1%F2", "òåêñò" becomes "текст" + * Source: http://xpoint.ru/know-how/JavaScript/PoleznyieFunktsii?38#PerekodirovkaIzWindows1251IKOI + */ +function win2unicode(str) { + var charmap = unescape( + "%u0402%u0403%u201A%u0453%u201E%u2026%u2020%u2021%u20AC%u2030%u0409%u2039%u040A%u040C%u040B%u040F" + + "%u0452%u2018%u2019%u201C%u201D%u2022%u2013%u2014%u0000%u2122%u0459%u203A%u045A%u045C%u045B%u045F" + + "%u00A0%u040E%u045E%u0408%u00A4%u0490%u00A6%u00A7%u0401%u00A9%u0404%u00AB%u00AC%u00AD%u00AE%u0407" + + "%u00B0%u00B1%u0406%u0456%u0491%u00B5%u00B6%u00B7%u0451%u2116%u0454%u00BB%u0458%u0405%u0455%u0457"); + + var code2char = function(code) { + if(code >= 0xC0 && code <= 0xFF) return String.fromCharCode(code - 0xC0 + 0x0410); + if(code >= 0x80 && code <= 0xBF) return charmap.charAt(code - 0x80); + return String.fromCharCode(code); + }; + + var res = ""; + + for(var i = 0; i < str.length; i++) res = res + code2char(str.charCodeAt(i)); + + return res; +}; \ No newline at end of file