×Закрыть
грузчик в CHI
  • В офис NIX Solutions пришла милиция

    яка нисенитныця))) иногда кажется что программисты живут на луне, а не в Украине! хорошо что в программировании мозг включать приходится реже чем в быту иначе индусами и нас называли бы...

  • Елена Денисенко — о карьере программиста и должности Team Lead в 19 лет

    Виктор Федрыч, это Вы? Вы не только писатель, но и читатель!

  • Нам бы (переносы на) понедельники взять и отменить

    Ассоциированные компании не предполагают доплату сотрудникам? Раб сила меньше бегает между фирмами — работодатель в плюсе. Будь добр накинь сотруднику % к его среднерыночной стоимости. Думаю, в таком случае число негативных мнений под темой сократиться в разы.

    Вы так бодро рассуждаете о загранице, словно кроме Вас там никто никогда не жил. Заграница всегда создает иллюзию удовлетворенности и безопасности для рабочего в замен на его эффективность. Потому на одной линии украинцы показывают результаты в 5 раз хуже — итальянец до и после работы на этой линии не боится, что поменять работу сможет лишь по разрешению хозяина, которым Вы себя возомнили. Ваше поведение вызывает смех, хотя студентов, которые не привыкли говорить ПНХ в слух при взрослых — жаль...

    Ничего личного. Только аргументы.

    Поддержал: Viktor Chyzhdzenka
  • Нам бы (переносы на) понедельники взять и отменить

    Нам бы рабов... взять и отменить! И всю их зп можно было бы оставлять себе... По моему чудный план! Прошу голосовать.

    Сорок лет блудила это «Ассоцияция аутсорсинга» по пустыне... таки нашли выход.
    ps. Языком трепать — не мешки таскать. ©

  • Java Core собеседование: кодировки

    спасибо! сам не ведаю, чего творю...

  • Java Core собеседование: кодировки

    (класс String) используют 16 битные code units, т.е UTF-16. Поэтому, когда вы у строки вызываете метод length, вы получите длину в кодовых единицах, а не количество символов в строке.
    Для String str = new String(new char[]{55378, 56816}); — кодовая единица в UTF-16 одна, а str.length() возвращает 2. Кол-во кодовых единиц вернет str.codePointCount(0, 2). Так что же мы получим вызвав length()?
  • Java Core собеседование: кодировки

    агентура не спит?

  • Java Core собеседование: кодировки

    вроде все мы с конспекта черпаем (за исключением reality hacker, он с момента зачатия все знает), видимо конспекты разные))

  • Java Core собеседование: кодировки

    какую информацию он несет в УТФ-16?

  • Java Core собеседование: кодировки

    Символ (character) — единица информации, которая соответствует письменному символу (графема) естественного языка общения. «?», «A», «+», к примеру.
    Каждая из графем (или набор графем), отображенных на Вашем мониторе, представляет собой глиф. Глиф (glyph), как единица графики, является графическим отображением графемы. Glyph символа процента или «собака», в конкретном случае, выглядят как «%», «@».
    Определенный стиль отображения глифа, с учетов размера, насыщенности, удобочитаемости и других характерных особенностей, это и есть шрифт (font). Примером современных компьютерных font’ов могут быть всем известные Arial, Calibri, Times New Roman и др.
    В промежутке между тем как символ языка общения в виде character отобразится на мониторе (к примеру) в виде glyph’а определенного font’а, происходит «конклав» кодировки. Процесс перевода каждого character на машинный язык требует определенного стандарта.
    Coded character set определяет как представить character в виде целого числа, которое называется code point. Для примера, символ представляющий большую букву «А» (лат.) имеет номер 65 (в ASCII). Один из первых coded character set — ASCII (American Standard Code for Information Interchange) — американский кодировочный стандарт для печатных символов и некоторых специальных кодов. ASCII представляет собой кодировку из 128 символов для представления цифр, латинских символов, знаков препинания и управляющих символов, каждому символу соответствует 7-ми битное значение целого числа. В целом на этом можно было бы и остановиться, если бы не наличие многих других символов различных письменностей, которые в ASCII учтены не были, да и 7-ми битная кодировка нравилась не всем. Что привело к развитию других систем кодирования символов — возникла, как минимум, проблема совместимости.
    Таким единым стандартом является Unicode (юникод) — стандарт кодирования символов, который представляет практически все возможные знаки письменности. Изначально кодовое пространство Unicode включало 65536 code points. В дальнейшем кодовое пространство Юникода было расширено до 1 112 064 code points. Где первые 65 536 - первоначальное пространство 16-битных представлений символов, 2048 — количество значений забронированных для элементов суррогатных пар (от 55 296 до 57 343), 1 048 576 — пространство для символов не вошедших в первый диапазон (Basic Multilingual Plane) — supplementary characters. В итоге пространство Юникода разбилось на 17 плоскостей, где 0-ая плоскость — Basic Multilingual Plane — со всеми наиболее часто используемыми символами.
    Один из методов, с помощью которого Юникод мапится на character set — Unicode Transformation Format encoding (UTF) . Этот метод породил 3 известные кодировки: UTF-8, UTF-16, UTF-32

    А что такое этот самый «UTF», если «их» так много?

    >> [65]
    >> [-2, -1, 0, 65]
    >> [0, 65]
    >> [65, 0]
    >> [0, 0, 0, 65]
    >> [0, 0, 0, 65]
    >> [65, 0, 0, 0]

    >> [65] — использована кодировка UTF-8 — 8-ми битный формат преобразования Юникода, что для символа «A» являет собой один байт и совпадает со значением кодировки ASCII. Первые символы Unicode полностью соответствуют кодировке ASCII.

    >> [-2, -1, 0, 65] — кодировка UTF-16 — 16-ти битный формат преобразования Юникода. UTF-16 имеет представления UTF-16BE и UTF-16LE, что значит Bid Endian и Little Endian — по сути требование компьютерной архитектуры, которая использует многобайтные значения со старшим байтом в начале (Little Endian) или старшим байтом в конце (Big Endian). BE и LE — метки порядка байт или понятным языком byte order mark — BOM.
    По умолчанию UTF-16 использует Big Endian, чтобы неявно это обозначить, в начало строки (в нашем случае «A») вставляется два байта обозначающие то самое Big Endian. Эти байты [-2, −1] в начале сроки, U+FEFF и U+FFFE в шестнадцатеричном представлении — непечатные символы в Unicode.
    >> [0, 65] >> [65, 0] — теперь легко можно понять порядок байт и отсутствие BOM в начале строки.
    >> [0, 0, 0, 65] >> [0, 0, 0, 65] >> [65, 0, 0, 0] — такая же ситуация как и в случае с использованием кодировки UTF-16 за исключением того что кодировка UTF-32 — система кодирования фиксированной длины Fixed width encoding — каждый символ Юникода должен быть представлен в виде 32 бит. Преимущество UTF-32 заключается в том что каждый code point представляет конкретный code point юникода. Тем не менее, UTF-32 достаточно тяжеловесный по тем же причинам.

    Почему строка в которой в два раза больше букв (2 вместо 1) занимает в только 1.5 раза больше места?

    System.out.println("A".getBytes("UTF-16").length);
    System.out.println("AA".getBytes("UTF-16").length);
    >> 4
    >> 6
    >> 4 — очевидно почему 4 байта(неявное указание BE занимает первые 2 байта).
    >> 6 — каждый следующий символ кодируется 2-мя байтами, как это и предусмотрено системой кодирования UTF-16, поэтому добавление следующего такого же символа добавляет всего два байта.

    Если UTF-8 так хорош (как все говорят), почему он занимает так много места (и чем он тогда хорош)?
    System.out.println("ЭЮЯ".getBytes("UTF-8").length);
    System.out.println("ЭЮЯ".getBytes("latin1").length);
    >> 6
    >> 3
    >> 6 — каждый символ кодирован 2мя байтами т.к. символы «ЭЮЯ» выходят за пределы однобайтного представления в UTF-8.
    >> 3 — каждый символ кодирован 1м байтом т.к. символы «ЭЮЯ» кодируются cp1251 — широко используемая 8-ми битная кодировка (подобно ASCII) для кириллических символов.
    Как строка из одного символа может сохраняться в разные размеры байтовых массивов

    char ch;
    ch = 0x0001;
    ch = 0x0111;
    ch = 0x1111;
    >> [1]
    >> [-60, -111]
    >> [-31, -124, -111]
    Учитывая то, что UTF-8 (как и UTF-16) — Variable width encoding — система кодирования, использующая коды различной длинны для представления символов.
    ch = 0×0001 — входит в диапазон code points 0×0000 — 0×007F, который представляет символы одним байтом — 0xxxxxxx.
    ch = 0×0111 — code points 0×0080 — 0×07FF — 2х байтное представление 110xxxxx 10xxxxxx.
    ch = 0×1111 — code points 0×0800 — 0xFFFF — 3х байтное представление 1110xxxx 10xxxxxx 10xxxxxx.
    Где каждый байт — Code unit — минимальный набор бит, который представляет единицу кодированного текста. Для UTF-16 — code unit состоит из 16 бит и из 32х для UTF-32.

    Все таки в этой строке ОДИН символ или ДВА?

    >> �
    >> 2
    >> 1
    >> ?
    >> ?
    В этой строке один символ.
    Метод length() возвращает кол-во знаков char в строке. И если бы, допустим, мы на основе этого метода пытались выделить количество ячеек для имени китайца на китайском языке, то ячеек всегда оказывалось бы больше чем китайцу нужно.
    Метод codePointCount(0, 2) вернул количество символов соответствующих стандарту Юникод(то что нужно китайцу) — 1 символ. Символы, которые лежат выше BMP или следующие за code point U+FFFF (65535) называются supplementary characters. Это символы Юникода — пары 16-битных знаков char, которые называются суррогатными парами (surrogate pair). Два знака char — суррогатное представление символов Юникода в диапазоне от U+10000 до U+10FFFF.

  • Java Core собеседование: кодировки

    То есть символы выше 0×7FF будут сохраняться в одном char’e
    более того, до 0хFFFF все символы будут представляться одним знаком char.
    В UTF-8 и в UTF-32 суррогатные пары не используются это просто пропуск в длинном списке символов.
    думаю, не правильно! Все символы Юникода в т.ч. и суррогатные пары кодируются любой из UTF кодировок. В UTF-8 — четырьмя code units, в UTF-34 — одним(4х байтным) code unit
  • Java Core собеседование: кодировки

    Если попробовать далее ввести еще «ААА» или «АААА» будет 8 и 10 байт.А разгадка одна — символ конца строки занимает 2 байта.
    скорее комбинация символов (the last two code points of the BMP, U+FFFE and U+FFFF) обозначающих endianness по умолчанию.
    ...unmarked form uses big-endian byte serialization by default, but may include a byte order mark at the beginning to indicate the actual byte serialization used. Asmus Freytag.
    А если в нём, например, поровну русских и арабских букв — в UTF 8 он будет в два раза меньше, чем, например, в Windows 1251
    что значит арабские буквы в Windows 1251? Вы уже не первый кто говорит о кодировании арабского <>текста<> в 1251.
  • Java Core собеседование: кодировки

    3. от 0×7f до 0×7ff UTF-8 сохранит символ в два байта, но в Java это будет всё ещё один char
    char один, но машинное представление мультибайтное, что в случае с UTF-8 указывает на variable width encoding. я не прав?
  • Java Core собеседование: кодировки

    но Unicode оставался для меня тайной покрытой туманом. Вроде и ясно что два байта на символ, но всё равно знания какие-то зыбкие.
    Разве два? как на счет символа, code point которого в Unicode равен 1112064?
    Для UTF-16 (без LE и BE) порядок байтов определяют первые два байта текста — 0xFF 0xFE (-1 −2) соответствует UTF-16LE
    кажется проблемы с пунктуацией иначе как обьяснить отсутствие комбинации (-1 −2) при явном указании LE-BE:
    System.out.println(Arrays.toString("A".getBytes("UTF-16″)));
    System.out.println(Arrays.toString("A".getBytes("UTF-16BE")));
    System.out.println(Arrays.toString("A".getBytes("UTF-16LE")));

    >> [-2, −1, 0, 65]
    >> [0, 65]
    >> [65, 0]

    До 0×7F, т.к. 0×7FF — уже воспользовался возможностями переменной длинны?

    имеют переменную длину и для того чтобы записать достаточно большие символы (для UTF-8 свыше 0×7FF
  • Подтвердженные аккаунты на ДОУ

    спасибо!

    Поддержал: Артём Иванов
  • Подтвердженные аккаунты на ДОУ

    я навязываюсь. спасибо

  • Подтвердженные аккаунты на ДОУ

    Как подтвердиться?...