• Windows кодировки неговно nodejs понадобилось написать консольную программу, которая читает ввод с русскими буквами и делает запрос в интернет с ними. nodejs прекрасно прочитал русские буквы, автоматически перекодировал из UTF-16 в UTF-8 плюс при отправке запроса (axios, не знаю умеет ли так fetch) автоматически сделал urlencode русским буквам, все работает без единого указания КОДИРОВОК, с которыми 20 лет воюют питоноебы и прочие удивляющиеся "мам, ну пачимуууу люди пишут на js" :)
    ♡ recommended by @tsul  and 1 others

Replies (13)

  • @vt, читает ввод
    UTF-16
    Профессор Кисых Щей, расскажите лекцию, откуда при перенаправленном вводе‐выводе взялось UTF-16?
  • @mabu, наверное ты хочешь cmd.exe /U ? Но я ничего не перенаправлял, просто "node script.js текст" запускаю
  • @vt, Для вывода юникодных (UTF-16) строк на консоль есть функция WriteConsoleW, но она не работает если вывод перенаправлен. Когда вывод перенаправлен, следует использовать WriteFile, но в таком случае делают конвертацию из UTF-16 в текущую кодировку.
  • @mabu, Ну я и говорю, обо всем уже позаботились разработчики nodejs, а я тупо пишу скрипт, не забивая себе голову этой херней
  • @vt, читает ввод
    Но я ничего не перенаправлял
    Противоречие?
  • @mabu, Профессор Кислых Щей перепутал перенаправление ввода‐вывода и передачу параметра?
  • @mabu, Уверен на 99.999% что и ввод оно умеет читать без лишних телодвижений с моей стороны
  • @vt, Давай, сделай в консоли node script.js < текст
  • @mabu, cmd /u /c echo тест | node script.js > 1.txt — все работает
    сам скрипт вот, без всяких кодировок paste.org.ru
    (на самом деле это чит, ибо строка в nodejs тоже в UTF-16, если бы она была UTF-8, как в других говноскриптах, то ничего бы не вышло)
  • @mabu, хотя в случае ВЫВОДА console.log — все делается корректно — оно знает что не надо никуда перекодировать и выводит как есть, а в линуксе будет в UTF-8 перекодировать
  • @mabu, лол, или не будет и насрет UTF-16, ибо в примерах пишут делать setEncoding('utf-8'). Ну это линукспроблемы! В винде все работает из коробки!
  • @mabu, таки в линуксе тоже работает, видимо перекодирует как надо:
    $ echo тест | node script.js > 1.txt
    $ cat 1.txt
    тест
  • @mabu, Так:
    Class Method: Buffer.from(string[, encoding])
    string <string> A string to encode.
    encoding <string> The encoding of string. Default: 'utf8'.
    Таки буфер автоматически считается utf-8. Значит в винде оно сделало binmode(UTF-8) и винда перекодировала ноде как положено. Ну в общем, все сделали правильно, и оператору скриптов забивать голову этим говном не нужно.