Строки.

Забавная штука строки в программировании. Ну, что может быть проще — есть строка, ее куда-то передать и сохранить. Какие могут быть вообще проблемы с этим?

Как показывает опыт, гигантское количество может быть проблем.

Ну начнет с того, что есть куча кодировок: всякие UTF-8, Windows-1251, ASCII, ANSI? Если вы не совсем понимаете откуда растут ноги, то почитайте тут.

Кстати. еще приятная вещь, которая наложилась поверх всех этих UTF-16 это little-endianess и big endianess (можно почитать тут).

Но это еще все. Еще приятная штука, что куча программ/форматов используют специальные разделители для своих внутренних нужд.Ну например sheel в Unix использует | для pipes, да в Windows/DOS command line она тоже вроде используется. Соответственно, люди придумали escape символы, чтобы показать, что символ пользуется не в переносном (специальном смысла), а
прямом. К этому еще добавилось разделитель слов (пробел) и кавычки (как метод показать, что пробел не специальный знак).

К чему это я? Да прост убил фактически день на отслеживание следующей ситуации.

Installer использует
Command line и вызывает
Ruby script (с параметрами), который использует
Command line и вызывает
Java (c параметрами), которая вызывает какой-то
Java bean (внутри одного большого проекта), который читает и пишет
DB, а также создает
Certificate.

Из этого все Command line не любит определенные символы.
DB не любит определенные символы.
Certificate не любит определенные символы
Большой продукт пытается примерить некоторые входные параметры с тем, что не любит DB и Certificate. Но примеряет не все, не до конца и не совсем по стандарту. Плюс благодаря
этому он еще и херит некоторое количество того, что должно было работать для Certificate.

В общем, выдайте мне машину времени, нужно срочно вернуться на 50 лет назад и выдать им единый метод
а) Хранения integer в памяти
б) Encoding строк
в) Использования разделителей и escape characters
г) Правил по работе с строками вот в таких вот стеках.

3 комментария to “Строки.”

  1. paceholder:

    Я так и не понимаю, в чем разница между ANSI и ASCII =)

    • OrkaTT:

      как я понял:
      ASCII определяет только первые 128 (00-7F) символов и отдает все остальное на усмотрение девелупера.
      Потом всякие OEM навертели национальной хрени в оставшиеся 128 позиций (типа наших KOI-8R и 1251).
      Потом пришло ANSI и покрыло все наиболее популярные на тот момент извраты как стандарт.

      вот теперь и мучаемся 🙂

      • df:

        не было никаких оставшихся 128 позиций — материальный носитель был 7-битным.
        если 8-й бит вдруг случайно оказывался доступным,
        он использовался для контроля чётности.