Не понимаю смысл кодировок

204
16 сентября 2018, 15:50
  1. Когда в языке программирования (например javascript) мы пишем что-то в строку или добавляем символ (a = ''; a += 'b';), то в какой кодировке она хранится в самой памяти ?

  2. Зачем указывать кодирвоку при открытии текстового файла (Node js) если это просто набор бит?

  3. Зачем при сохранении указывать кодировку? Может чтоб битовая последовательность из памяти сохранилась именно в этой кодировке ? Но это не так. Ведь если я напишу строку и поставлю кодировку hex (Опять же я про node js) он ничего не сделает пустой файл. Даже hex edit показывает что там просто ничего нет. Как это всё работает? Просто помогите мне!

Answer 1

Вы немного неправильно представляете себе понятие "кодировка".

Кодировка - это "не представление последовательности бит при сохранении их в файл". Биты в памяти сохраняются в биты в файле без какого-то перекодирования.

в какой кодировке она хранится в самой памяти ?

Nodejs, как и многие другие языки высокого уровня, работает со строками не как с "битами в памяти", а как с последовательностью символов (именно символов, не байт!). Все операции со строками (a = ''; a += 'b';) принимают на вход строки, и возвращают строки.

Да, где-то внутри при этом в памяти перекладываются байты (которые являются представлением строки в какой-то кодировке). Но при этом в терминах языка и платформы вы работаете со строками именно как со строками, а не с массивами байт.

Так что ответ - неважно в какой, это особенности внутренней реализации строк, и на результат работы со строками это никак не влияет.

Зачем указывать кодирвоку при открытии текстового файла (Node js) если это просто набор бит?

Зачем при сохранении указывать кодировку? Может чтоб битовая последовательность из памяти сохранилась именно в этой кодировке ?

Строка - это последовательность символов, а не "битовая последовательность из памяти".

Сама по себе необходимость явного преобразования ее в биты в какой-то конкретной кодировке появляется только при сохранении строки в файл (который является массивом байт на диске), при передаче строки по сети (в виде массива байт), или при попытке явно поработать с ней как с байтами.

Именно поэтому при открытии файла вам приходится указывать кодировку - чтобы явно задать, как преобразовать строку (последовательность символов) в байты файла, и наоборот.

Да, при этом где-то внутри реализации на самом деле происходит перекодирование из "строки в виде байт с использованием кодировки хранения в памяти" в "строку в виде байт, указанных при сохранении файла", но это внутренняя реализация механизма. С точки зрения платформы - вы сохраняете строку (символы) в виде байт на диск.

Answer 2

Зачем указывать кодирвоку при открытии текстового файла (Node js) если это просто набор бит?

А вот какую букву этот набор бит (лучше, наверное, говорить про набор байт) - вот именно это и определяется кодировкой. Кодировка - это именно соответствие буквы и набору байт. И один и тот же набор может показать совершенно разный текст в зависимости от кодировки.

READ ALSO
Отобразить страницу с javascript на java

Отобразить страницу с javascript на java

Начинаю изучение java, решил создать простенький парсер для сайтаСтолкнулся с проблемой не отображения javascript в получаемом теле сайта, а точнее...

228
Каждые 2 секунды приходит json-ответ от сервера. Как подвесить событие на изменение значения?

Каждые 2 секунды приходит json-ответ от сервера. Как подвесить событие на изменение значения?

У меня два вопроса, связанные между собой: 1) Есть ли специальные события, которые реагируют на изменение значения переменной? 2) К примеру...

187
Delete elements from array by .splice()

Delete elements from array by .splice()

Как я могу удалить элемент вложенного массива? Типа: array[i][j], где j - удаляемый элемент

228
Не работает gulp watch

Не работает gulp watch

Не запускается таск watch, сервер стартует, а после него ничегоВ чем проблема и как исправить?

212