beardog
05.05.2012 18:39 16759805441336197348101189
Есть метод fs.readFile(), который, очевидно, читает файл. Получает имя файла, кодировку и колбек для обработки результата. Кодировку можно не указывать, она по умолчанию равна 'utf8'. Но нюанс: если кодировка явно не указана, в колбек данные прийдут в виде обьекта, а не строки.
а что, duck typing не работает? toString не прописали, или в чём вопрос?
вопрос в том, что в случае буфера data[1] возвращает число, а в случае строки — символ
то есть, даже несмотря на то, что буфер data может быть преобразован в строку, data[1] возвращает число? WAAAAAAAAT?
Я не знаю, во что он может быть преобразован, я ж его не преобразовывал :) Просто в одном случае приходит массив чисел (что само по себе логично — вдруг я бинарный файл читаю), а в другом — строка. Поскольку у того и у другого есть [], программа может вроде как работать, но выдавать нечто странное.
вот теперь окончательно понял проблему.
Пичалька.
Даже не знаю, что бы смог поделать в данном случае для надёжного решения проблемы. Переопределить метод так, чтобы ему, независимо от обстоятельств, передавался / не передавался аргумент с кодировкой?
просто не забывать передавать аргумент с кодировкой
охлол, не забывать. И таблицу перед глазами повесить, что ещё нужно не забывать. Отвратительное решение. Нужно системным образом исправлять это дело, хотя бы в своём коде.
> она по умолчанию равна 'utf8'
Нет, она не равна по умолчанию ничему. Если кодировка не указана, тебе придёт буфер с сырыми данными, без кодировки вообще, интерпретируй как хочешь. Читаем мануал. Стабильность модуля "fs" — 3, это значит, что API может измениться в будущих версиях. "Кодировка по умолчанию", вроде, была в readFile() когда-то в прошлом году.
дурацкое ощущение ложной памяти. Я вроде точно помню, что там было написано про умолчание, но сейчас полез проверить — нет такого :(
Да, у меня так тоже бывает. Жалко, контроллер памяти в мозгу перепрошить нельзя.