Подтвердить что ты не робот

UTF-8: сколько байтов используется языками для представления видимого символа?

Существует ли таблица или что-то подобное, которая показывает, сколько байтов в разных языках требуется в среднем для представления видимого символа (глифа), когда кодировка является utf8?

4b9b3361

Ответ 1

Если вы хотите что-то общее, я думаю, вы должны придерживаться этого:

  • Английский язык занимает чуть более 1 байт на символ (есть случайный символ, отличный от ASCII, часто пунктуация или символы, встроенные в текст).
  • Большинство других языков, которые используют латинский алфавит, используют несколько больше, чем 1, но я был бы удивлен, если бы вы ожидали большего, чем, скажем, 1.5.
  • Языки, использующие некоторые другие скрипты (греческий и т.д.), занимают около 2 байтов на символ.
  • Восточноазиатские языки занимают около 3 байтов на символ (интервал, управляющие символы и встроенный ASCII делают меньше, не BMP заставляет его брать больше).

Это все очень неполное, приблизительное и не количественное.

Если вам нужно что-то более количественное, я думаю, вам придется изучать каждый язык по отдельности. Я сомневаюсь, что вы найдете предварительно вычисленные результаты там, которые уже применяются к множеству разных языков.

Если у вас есть текст текста для языка, легко вычислить среднее количество необходимых байтов. Начните с страницы Текстовый корпус в Википедии. Он связывает, по крайней мере, один хороший свободно доступный корпус для английского языка, и некоторые из них могут быть доступны и для других языков (я не искал ссылки, чтобы узнать).

Кстати, я не рекомендую использовать эту информацию для усечения длины поля базы данных, как вы указали (в комментариях), которую вы намереваетесь сделать. Прежде всего, если вы использовали корпус, составленный из litterature, чтобы придумать ваше ожидаемое количество байтов на символ, вы можете обнаружить, что корпус вовсе не представляет короткие короткие текстовые строки, которые попадают в вашу базу данных, отбрасывая ваше ожидание. Просто получите весь столбец базы данных. Большинство результатов будут намного короче максимальной длины, а когда это не так, я не думаю, что ваша оптимизация стоит того, чтобы сохранить сто байтов или около того.

Ответ 2

Посмотрите на список блоков Unicode и их диапазоны кодовых точек, например. просматриваемый http://www.fileformat.info/info/unicode/block/index.htm или официальный http://www.unicode.org/Public/UNIDATA/Blocks.txt:

  • Любое до U + 007F принимает 1 байт: Базовая латиница
  • Затем до U + 07FF требуется 2 байта: греческий, арабский, кириллический, иврит и т.д.
  • Затем до U + FFFF требуется 3 байта: китайский, японский, корейский, деванагари и т.д.
  • Помимо этого он занимает 4 байта