Строковая длина равняется размеру байта?

Хорошо, похоже, Outlook не нравится изменение свойства display display . Я немного изменил ваш код, поэтому он использует элементы span вместо p араграфов, так что они естественным образом выстраиваются так, как вы хотите, без использования свойства display.

Вот оригинал (без встроенного CSS):

body {
  font-family: Georgia;
  color: rgb(22, 31, 53);
}

.links {
  color: rgb(22, 31, 53);
}

.links .link-text {
  color: rgb(22, 31, 53);
}
<!DOCTYPE html>
<html>

<body>
  <img src="https://static1.squarespace.com/static/5755c2b9356fb0c7e2943cf6/t/58800e158419c2ec7abbbd80/1484787227067/TheTest_banner_r2.png?format=2500w" width="571" height="168">

  <div class="links" style="font-size: 15px;">
    <a href="#"><span class="link-text">Test</span></a><span> | </span>
    <a href="#"><span class="link-text">Test</span></a><span> | </span>
    <a href="#"><span class="link-text">Test</span></a><span> | </span>
    <a href="#"><span class="link-text">Test</span></a><span> | </span>
    <a href="#"><span class="link-text">Test</span></a><span> | </span>
    <a href="#"><span class="link-text">Test</span></a>
  </div>

  <p style="font-size: 11px;">Lorem Ipsum is simply dummy text of the printing and typesetting industry. <br/>Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, </p>
</body>

</html>

А вот встроенная версия, которую я протестировано с использованием клиента Office365 Outlook:

body {
  font-family: Georgia;
  color: rgb(22, 31, 53);
}

.links {
  color: rgb(22, 31, 53);
}

.links .link-text {
  color: rgb(22, 31, 53);
}
<!DOCTYPE html>
<html>

<body style="font-family: Georgia;color: rgb(22, 31, 53);">
  <img src="https://static1.squarespace.com/static/5755c2b9356fb0c7e2943cf6/t/58800e158419c2ec7abbbd80/1484787227067/TheTest_banner_r2.png?format=2500w" width="571" height="168">

  <div class="links" style="font-size: 15px;color: rgb(22, 31, 53);">
    <a href="#"><span class="link-text" style="color: rgb(22, 31, 53);">Test</span></a><span> | </span>
    <a href="#"><span class="link-text" style="color: rgb(22, 31, 53);">Test</span></a><span> | </span>
    <a href="#"><span class="link-text" style="color: rgb(22, 31, 53);">Test</span></a><span> | </span>
    <a href="#"><span class="link-text" style="color: rgb(22, 31, 53);">Test</span></a><span> | </span>
    <a href="#"><span class="link-text" style="color: rgb(22, 31, 53);">Test</span></a><span> | </span>
    <a href="#"><span class="link-text" style="color: rgb(22, 31, 53);">Test</span></a>
  </div>

  <p style="font-size: 11px;">Lorem Ipsum is simply dummy text of the printing and typesetting industry. <br>Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, </p>

</body>

</html>

Примечание. Ваш CSS для изменения цвета является избыточным. Я оставил все как есть, используя новые элементы, на случай, если позже вы захотите изменить их на действительно значимые вещи.

15
задан Darryl Hein 3 January 2009 в 20:46
поделиться

6 ответов

Нет. Нуль завершился, строка имеет один дополнительный байт. Строка Паскаля (Delphi shortstring) имеет дополнительный байт для длины. И строки unicode имеют больше чем один байт за символ.

unicode это зависит от кодирования. Это могли быть 2 или 4 байта за символ или даже соединение 1,2 и 4 байта.

47
ответ дан 30 November 2019 в 23:49
поделиться

Не всегда, это зависит от кодирования.

3
ответ дан 30 November 2019 в 23:49
поделиться

Это зависит от того, что Вы подразумеваете под "длиной". Если Вы имеете в виду "количество символов" затем, нет, много языков/методов кодирования используют больше чем один байт за символ.

6
ответ дан 30 November 2019 в 23:49
поделиться

Это полностью зависит от платформы и представления.

Например, в.NET строка берет два байта в памяти на кодовую точку UTF-16. Однако суррогатные пары требуют двух значений UTF-16 для полного символа Unicode в диапазоне U+100000 к U+10FFFF. Форма в оперативной памяти также имеет издержки для длины строки и возможно некоторого дополнения, а также обычного объекта наверху указателя типа и т.д.

Теперь, когда Вы выписываете строку к диску (или сеть, и т.д.) от.NET, Вы указываете кодирование (с большинством классов, принимающих значение по умолчанию к UTF-8). В той точке размер зависит очень от кодирования. ASCII всегда берет единственный байт на символ, но очень ограничен (никакие диакритические знаки и т.д.); UTF-8 дает полный Диапазон Unicode с кодированием переменной (все символы ASCII представлены в единственном байте, но другие поднимают больше). UTF-32 всегда использует точно 4 байта для любого символа Unicode - список продолжается.

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

23
ответ дан 30 November 2019 в 23:49
поделиться

Нет никакого единственного ответа; это зависит от языка, и реализация (помните, что некоторые языки имеют несколько реализаций!)

Завершенные нулем строки ASCII занимают по крайней мере еще один байт, чем "содержание" строки. (Больше может быть выделено, в зависимости от того, как строка была создана.)

Строки Non-zero-terminated используют дескриптор (или подобная структура) для записи длины, которая берет дополнительную память где-нибудь.

Строки Unicode (на различных языках) используют два байта за символ.

На строки в объектно-ориентированной памяти можно сослаться через дескрипторы, который добавляет слой косвенности (и больше данных) для упрощения управления памятью.

3
ответ дан 30 November 2019 в 23:49
поделиться

Вы корректны. Если Вы кодируете ASCII, существует один байт за символ. Иначе это - один или несколько байтов на символ.

В частности, важно знать как эта подстрока эффектов операции. Если у Вас нет одного байта за символ, s [n] получают энный байт или энный символ? Получение энного символа будет неэффективно для большого n вместо константы, как это с одним байтом за символ.

2
ответ дан 30 November 2019 в 23:49
поделиться
Другие вопросы по тегам:

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