Асхаб Бовкаев Блог Строки в языках программирования

Строки в языках программирования

Строки представляют собой последовательности символов. Однако при этом то, что конкретно представляет собой символ, во многом зависит от языка и параметров операционной системы, в которой запущено приложение. Дни, когда считалось, что каждый символ в строке представлен одним байтом, прошли. Многобайтные кодировки в Unicode необходимы для корректного сохранения текста в условиях современной глобальной экономики.

В более современных языках, например, в Java и С#, есть тип многобайтовых символов, в то время как в С и C++ символы всегда занимают один байт (в последних версиях С и C++ появился символьный тип wchart, который обычно является многобайтным). Но даже при наличии встроенных многобайтных символьных типов корректно обработать все варианты котировки Unicode не так-то просто: в Unicode определено более 100 000 кодовых точек, все их невозможно представить в виде 2-байтового символа из Java или типа char из С#. Проблема обычно решается путем кодирования с переменной длиной, когда для представления некоторых кодовых точек применяются последовательности более чем одного базового типа символов.

Одна из таких кодировок, UTF-16, применяется для представления строк в языках Java и С#. В ней большинство распространенных кодовых точек представляются как один 16-битный объект char, а для представления остальных применяются два 16-битных символа. Другая распространенная кодировка – UTF-8 – часто служит для сохранения текста в файле или для передачи его по сети. Для передачи всех кодовых точек кодировки Unicode в ней используется от одного до четырех 8-битных символов. При этом все символы набора ASCII представлены одним байтом, соответственно, текст в кодировке ASCII представляет собой разновидность текста в кодировке UTF-8.

Кодирование с переменной длиной серьезно усложняет манипуляции строками: символов в строке может оказаться меньше, чем требуется объектов char для ее сохранения. А значит, нужно позаботиться о том, чтобы не перепутать часть многосимвольной кодовой точки с целым символом. Для простоты большинство связанных со строками задач сфокусированы на алгоритмах управления строками, в которых используется обычный символьный тип языка, а вопросы кодирования с переменной длиной игнорируются.

Впрочем, вне зависимости от кодировки, в большинстве языков строки сохраняются как массивы даже с учетом разницы в обработке массивов и строк. Многие задачи со строками включают в себя операции, требующие доступа к строке как к массиву. Если в языке строка и массив принадлежат к разным типам, имеет смысл преобразовать данные в массив, а после обработки вернуть им первоначальный вид.

Поделиться с друзьями:

Если вам понравился материал, поделитесь с друзьями — обрадуйте их!

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

три × 5 =