Как я кодирую/декодирую массивы байтов UTF-16LE BOM?

Вам действительно нужен только div, как у вас сейчас есть.

Посмотрите на фрагмент. Вам нужно будет измерить точный размер шрифта и семейство шрифтов. Это хорошее начало.

#rcorners1 {
  border-radius: 25px;
  background: #73AD21;
  width: 200px;
  height: 150px;
  text-align: center;
  padding: 38px 0;
  box-sizing: border-box;
  font-size: 30px;
  background: -moz-linear-gradient(top, #77b26d 0%, #ffffff 55%, #ffffff 57%, #77b26d 100%);
  /* FF3.6-15 */
  background: -webkit-linear-gradient(top, #77b26d 0%, #ffffff 55%, #ffffff 57%, #77b26d 100%);
  /* Chrome10-25,Safari5.1-6 */
  background: linear-gradient(to bottom, #77b26d 0%, #ffffff 55%, #ffffff 57%, #77b26d 100%);
  /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#77b26d', endColorstr='#77b26d', GradientType=0);
  /* IE6-9 */
}
<div class="container">
  <p id="rcorners1">JAN<br/>2015</p>
</div>

22
задан Jared Oberhaus 18 May 2009 в 20:27
поделиться

4 ответа

Имя кодировки «UTF-16» всегда будет кодироваться с помощью спецификации и декодировать данные с использованием либо большого / малого порядка байтов, но «UnicodeBig» и «UnicodeLittle» полезны для кодирования в определенных порядок байтов. Используйте UTF-16LE или UTF-16BE без спецификации - см. Этот пост , чтобы узнать, как использовать "\ uFEFF" для обработки спецификаций вручную. См. здесь для канонического наименования имен строк кодировки или (предпочтительно) класса Charset . Также обратите внимание, что только ограниченное подмножество кодировок абсолютно необходимо для поддержки.

28
ответ дан 29 November 2019 в 04:36
поделиться

Вот как вы это делаете в nio:

    return Charset.forName("UTF-16LE").encode(message)
            .put(0, (byte) 0xFF)
            .put(1, (byte) 0xFE)
            .array();

Это, безусловно, должно быть быстрее, но я не знаю, сколько массивов он делает скрытыми, но мое понимание суть API в том, что он должен минимизировать это.

7
ответ дан 29 November 2019 в 04:36
поделиться

Во-первых, для декодирования вы можете использовать набор символов «UTF-16»; который автоматически определяет начальную спецификацию. Для кодирования UTF-16BE вы также можете использовать набор символов «UTF-16» - который будет писать правильную спецификацию, а затем выводить материал с прямым порядком байтов.

Для кодирования с прямым порядком байтов с помощью спецификации я не думаю ваш текущий код слишком плох, даже с двойным распределением (если только ваши строки действительно чудовищны). Что вы можете сделать, если они есть, - это иметь дело не с байтовым массивом, а скорее с java.nio ByteBuffer, и использовать класс java.nio.charset.CharsetEncoder. (Его можно получить из Charset.forName ("UTF-16LE"). NewEncoder ()).

даже с двойным распределением (если только ваши строки действительно чудовищны). Что вы можете сделать, если они есть, - это иметь дело не с байтовым массивом, а скорее с java.nio ByteBuffer, и использовать класс java.nio.charset.CharsetEncoder. (Его можно получить из Charset.forName ("UTF-16LE"). NewEncoder ()).

даже с двойным распределением (если только ваши строки действительно чудовищны). Что вы можете сделать, если они есть, - это иметь дело не с байтовым массивом, а скорее с java.nio ByteBuffer, и использовать класс java.nio.charset.CharsetEncoder. (Его можно получить из Charset.forName ("UTF-16LE"). NewEncoder ()).

6
ответ дан 29 November 2019 в 04:36
поделиться
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(string.length() * 2 + 2);
    byteArrayOutputStream.write(new byte[]{(byte)0xFF,(byte)0xFE});
    byteArrayOutputStream.write(string.getBytes("UTF-16LE"));
    return byteArrayOutputStream.toByteArray();

РЕДАКТИРОВАТЬ: перечитывая ваш вопрос, я вижу, что вы предпочли бы вообще избежать двойного распределения массива. К сожалению, насколько мне известно, API этого не дает. (Был метод, но он устарел, и вы не можете указать с его помощью кодировку.)

Я написал выше до того, как увидел ваш комментарий, я думаю, что ответ на использование классов nio находится на правильном пути. Я смотрел на это, но я недостаточно знаком с API, чтобы знать, как это сделать.

2
ответ дан 29 November 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: