Применение искинов - шоссе империализма (Стенгазета русификаторов ИТ)

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Ищу кодировку

Сообщений 1 страница 19 из 19

1

примерно такую:

[html]
Вариант от 2019-07-09:
<br />
буквы для кодирования выбраны из таблицы частот встречаемости букв (по убыванию частоты)
<br />
перевод строки = ПС
<br />
символ пробела = СП
<br />
<table border="1" cellspacing="0" cellpadding="3">

<tr><th>Я</th><td>ПС</td><td>а</td><td>б</td><td>в</td><td>г</td><td>д</td><td>е</td><td>ё</td><td>ж</td><td>з</td><td>и</td><td>й</td><td>к</td><td>л</td><td>м</td><td>н</td></tr>
<tr><th>У</td><td>о</td><td>п</td><td>р</td><td>с</td><td>т</td><td>у</td><td>ф</td><td>х</td><td>ц</td><td>ч</td><td>ш</td><td>щ</td><td>ъ</td><td>ы</td><td>ь</td><td>э</td></tr>
<tr><th>П</th><td>ю</td><td>я</td><td>А</td><td>Б</td><td>В</td><td>Г</td><td>Д</td><td>Е</td><td>Ё</td><td>Ж</td><td>З</td><td>И</td><td>Й</td><td>К</td><td>Л</td><td>М</td></tr>
<tr><th>Д</th><td>Н</td><td>О</td><td>П</td><td>Р</td><td>С</td><td>Т</td><td>У</td><td>Ф</td><td>Х</td><td>Ц</td><td>Ч</td><td>Ш</td><td>Щ</td><td>Ъ</td><td>Ы</td><td>Ь</td></tr>
<tr><th>М</th><td>Э</td><td>Ю</td><td>Я</td><td>а́</td><td>е́</td><td>ё́</td><td>и́</td><td>о́</td><td>у́</td><td>ы́</td><td>э́</td><td>ю́</td><td>я́</td><td>А́</td><td>Е́</td><td>Ё́</td></tr>
<tr><th>К</th><td>И́</td><td>О́</td><td>У́</td><td>Ы́</td><td>Э́</td><td>Ю́</td><td>Я́</td><td>.</td><td>?</td><td>!</td><td>,</td><td>;</td><td>:</td><td>...</td><td>&mdash;</td><td>_</td></tr>

<tr><th>Л</th><td>(</td><td>)</td><td>[</td><td>]</td><td>{</td><td>}</td><td>⟨ </td><td>⟩</td><td>⸨</td><td>⸩</td><td>⟦</td><td>⟧</td><td>❴ </td><td>❵</td><td>《</td><td>》</td></tr>
<tr><th>В</th><td>&lt;</td><td>&gt;</td><td>&le;</td><td>&ge;</td><td>&laquo;</td><td>&raquo;</td><td>„</td><td>”</td><td>=</td><td>≠</td><td>§</td><td>№</td><td>&bull;</td><td>%</td><td>~</td><td>₽</td></tr>

<tr><th>Р</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>+</td><td>&times;</td><td>-</td><td>/</td><td>^</td><td>СП</td></tr>

<tr><th>С</th><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><th>Т</th><td>©</td><td>®</td><td>™</td><td>&curren;</td><td>₿</td><td>#</td><td>¥</td><td>€</td><td>$</td><td>@</td><td>&</td><td>*</td><td>|</td><td>\</td><td>↑</td><td> ↓</td></tr>
<tr><th>Н</th><td>&deg;</td><td>¶</td><td>`</td><td>'</td><td>"</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><th>И</th><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>æ</td><td>Æ</td><td>a</td><td>b</td><td>c</td><td>d</td></tr>
<tr><th>А</th><td>e</td><td>f</td><td>g</td><td>h</td><td>i</td><td>j</td><td>k</td><td>l</td><td>m</td><td>n</td><td>o</td><td>p</td><td>q</td><td>r</td><td>s</td><td>t</td></tr>
<tr><th>Е</th><td>u</td><td>v</td><td>w</td><td>x</td><td>y</td><td>z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td></tr>
<tr><th>О</th><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr>

<tr><th>&nbsp;</th><th>О</th><th>Е</th><th>А</th><th>И</th><th>Н</th><th>Т</th><th>С</th><th>Р</th><th>В</th><th>Л</th><th>К</th><th>М</th><th>Д</th><th>П</th><th>У</th><th>Я</th></tr>

</table>
по вертикали первый квартет битов (старший, пишется правее), по горизонтали второй квартет битов (младший, пишется левее),
Таком образом байт с символом пробел будет записан буквами как 'РЯ' (как в координатной системе в математике вертикальная ось направлена вверх). Перевод строки (конец строки) - 'ЯО'.
Называть таблицу "ЯОРЯ-19-07"
[/html]

Вариант от 2019-03-31
[html]
<table border="1" cellspacing="0" cellpadding="3">
<thead>
<tr><th>&nbsp;</th><th>0</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7</th><th>8</th><th>9</th><th>10</th><th>11</th><th>12</th><th>13</th><th>14</th><th>15</th></tr>
</thead>
<tbody>
<tr><th>0</th><td>а</td><td>б</td><td>в</td><td>г</td><td>д</td><td>е</td><td>ё</td><td>ж</td><td>з</td><td>и</td><td>й</td><td>к</td><td>л</td><td>м</td><td>н</td><td>о</td></tr>
<tr><th>1</td><td>п</td><td>р</td><td>с</td><td>т</td><td>у</td><td>ф</td><td>х</td><td>ц</td><td>ч</td><td>ш</td><td>щ</td><td>ъ</td><td>ы</td><td>ь</td><td>э</td><td>ю</td></tr>
<tr><th>2</th><td>я</td><td>А</td><td>Б</td><td>В</td><td>Г</td><td>Д</td><td>Е</td><td>Ё</td><td>Ж</td><td>З</td><td>И</td><td>Й</td><td>К</td><td>Л</td><td>М</td><td>Н</td></tr>
<tr><th>3</th><td>О</td><td>П</td><td>Р</td><td>С</td><td>Т</td><td>У</td><td>Ф</td><td>Х</td><td>Ц</td><td>Ч</td><td>Ш</td><td>Щ</td><td>Ъ</td><td>Ы</td><td>Ь</td><td>Э</td></tr>
<tr><th>4</th><td>Ю</td><td>Я</td><td>а́</td><td>е́</td><td>ё́</td><td>и́</td><td>о́</td><td>у́</td><td>ы́</td><td>э́</td><td>ю́</td><td>я́</td><td>А́</td><td>Е́</td><td>Ё́</td><td>И́</td></tr>
<tr><th>5</th><td>О́</td><td>У́</td><td>Ы́</td><td>Э́</td><td>Ю́</td><td>Я́</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td></tr>

<tr><th>6</th><td>.</td><td>?</td><td>!</td><td>,</td><td>;</td><td>:</td><td>...</td><td>&mdash;</td><td>„</td><td>”</td><td>&laquo;</td><td>&raquo;</td><td>§</td><td>&bull;</td><td>%</td><td>_</td></tr>
<tr><th>7</th><td>+</td><td>&times;</td><td>-</td><td>/</td><td>=</td><td>&lt;</td><td>&gt;</td><td>^</td><td>₽</td><td>№</td><td>(</td><td>)</td><td>[</td><td>]</td><td>{</td><td>}</td></tr>

<tr><th>8</th><td>⟨ </td><td>⟩</td><td>⸨</td><td>⸩</td><td>⟦</td><td>⟧</td><td>❴ </td><td>❵</td><td>《</td><td>》</td><td>‰</td><td>‱</td><td>&le;</td><td>&ge;</td><td>≠</td><td>~</td></tr>

<tr><th>9</th><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><th>10</th><td>©</td><td>®</td><td>™</td><td>&curren;</td><td>₿</td><td>#</td><td>¥</td><td>€</td><td>$</td><td>@</td><td>&</td><td>*</td><td>|</td><td>\</td><td>↑</td><td> ↓</td></tr>
<tr><th>11</th><td>&deg;</td><td>¶</td><td>`</td><td>'</td><td>"</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><th>12</th><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>æ</td><td>Æ</td><td>a</td><td>b</td><td>c</td><td>d</td></tr>
<tr><th>13</th><td>e</td><td>f</td><td>g</td><td>h</td><td>i</td><td>j</td><td>k</td><td>l</td><td>m</td><td>n</td><td>o</td><td>p</td><td>q</td><td>r</td><td>s</td><td>t</td></tr>
<tr><th>14</th><td>u</td><td>v</td><td>w</td><td>x</td><td>y</td><td>z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td></tr>
<tr><th>15</th><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr>
</tbody>
</table>
[/html]

Отредактировано Лис (2019-03-31 21:15:07)

0

2

866? 1251?

0

3

Предлагаю кодировку, как UTF-8, только другую:
- во-первых, нужно заменить 1 на 0 и наоборот
- во-вторых, не нужно оставлять совместимость со старыми кодировками и терять на этом по биту в каждом байте.

Тогда можно закодировать:
01xxxxxx - это начало цепочки битов из одного байта ( 6 + 0 бит )
001xxxxx - это начало цепочки битов из двух байтов ( 5 + 7 бит )
0001xxxx - это начало цепочки битов из трёх байтов ( 4 + 14 бит )
00001xxx - это начало цепочки битов из четырёх байтов ( 3 + 21 бит )
000001xx - это начало цепочки битов из пяти байтов ( 2 + 28 бит )
0000001x - это начало цепочки битов из шести байтов ( 1 + 35 бит )
00000001 - это начало цепочки битов из семи байтов ( 49 бит )
1xxxxxxxx - это байт продолжения
00000000 - это специальная последовательность (для обозначения чего-нибудь, например конца строки)

Осталось только сделать список кодовых точек таким образом, чтобы первые 64 символа это были русские буквы (33+31).
Большинство текстов тогда смогут кодироваться одним байтом.
Проблема, правда есть, что две буквы не влезет. Можно выбрать заглавные Ь и Ъ,
а про сортировку сказать, что всё равно это только внешняя кодировка, а внутренняя будет отличаться.
Можно вообще буквы по частоте закодировать:
https://www.dpva.ru/Guide/GuideUnitsAlp … RuLetters/
тогда Ь и Ъ, мне кажется, будут на последнем месте по частоте.

Но зачем нам так много кодовых точек?
Не лучше ли сделать в стартовом наборе 7 битов, а байты продолжения по 6 битов, как в UTF-8 и сделали?

Проблема однобайтовости не в кодировке (Unified Transformation Format), а в том, какие codepoint-ы соответствуют каким символам.

Можно сделать как в UTF-8, но оставить идею инвертирования битов,
что позволит иметь код 00000000 как специальный символ.
И дополнительно можно сделать совместимость с какой-нибудь старой кодовой страницей, как посоветовал atzx,
где русские символы как раз с установленным старшим битом!

Тогда можно закодировать:
1xxxxxxx - это байт с выбранной кодировкой (7 бит)
001xxxxx - это начало цепочки битов из двух байтов ( 5 + 6 = 11 бит )
0001xxxx - это начало цепочки битов из трёх байтов ( 4 + 12 = 16 бит )
00001xxx - это начало цепочки битов из четырёх байтов ( 3 + 18 = 21 бит )
000001xx - это начало цепочки битов из пяти байтов ( 2 + 24 = 26 бит )
0000001x - это начало цепочки битов из шести байтов ( 1 + 30 = 31 бит )
00000001 - это начало цепочки битов из семи байтов ( 0 + 36 = 36 бит )
01xxxxxx - это байт продолжения
00000000 - это специальная последовательность (для обозначения чего-нибудь, например конца строки)

ну и имя ей какое-нибудь придумать, например:
кодировка "РУНА" = русское универсальное написание алфавитов.

Я только не знаю ни одной старой кодировки, в которой буква Ё на своём месте.

http://www.rusf.ru/books/yo/encoding.html
есть некая "sort", но там символов мало. Кстати, хороша ли идея размещать заглавные буквы перед строчными?

Для моих вариантов можно ввести отдельные названия:
РУНА-А = 64 русских символа в одном байте, по алфавиту
РУНА-Ы  = 64 русских символа, кроме Ь и Ъ. А "Ы" - потому что межу ними и кодируется в один байт.
РУНА-Ч = 64 русских символа в одном байте, отсортированные по частоте
РУНА = 127 символов в первом байте, как и в UTF-8

А так можно было бы сделать:
РУНА-1251 (начинается в части русских символов как кодовая страница windows)
РУНА-866 (начинается в части русских символов как кодовая страница dos)

Ещё я не очень понимаю, почему бы не вставлять вместо BOM указание на версию стандарта. Чтобы точно было понятно, по какому алгоритму раскодировать всё остальное. Если так сделали для UTF-16 и UTF-8, то почему не сделали для всех остальных вариантов?

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

Отличная идея на сегодняшний день, я считаю.

Отредактировано Лис (2019-04-01 06:49:30)

0

4

Мож я чё не понимайт, но  куда мы поместим шифт... (?) Судя по предлагаемой таблице шифт переключения а/А должен быть равен 21h, однако этот адрес уже занят буквой... (также и английский шифт оказался почему-то другого размера)))

Отредактировано Сандро (2019-04-01 14:55:19)

0

5

По меньшей мере 2 человека мою идею уже частично поддерживают. Поддержку высказали Юрий и МихалНик.
- Ну что-ж, для меня этого более, чем достаточно. Буду развивать идею и дальше... )))

0

6

Лис написал(а):

Если так сделали для UTF-16 и UTF-8, то почему не сделали для всех остальных вариантов?

Потому что все остальные варианты - были до UTF-8, была куча несовместимых кодировок, разных в разных ОС. Причём английский был везде на одном и том же месте (это к слову откуда ноги растут). И чтобы "уж точно" знать, что текст в UTF, решили обозначать его с помошью BOM.

Вообще, в чём смысл делать свою ни-с-чем-несовместимую кодировку? Какие преимущества она даст?

Отредактировано atzx (2019-04-01 20:35:00)

0

7

01xxxxxx - это начало цепочки битов из одного байта ( 6 + 0 бит )
001xxxxx - это начало цепочки битов из двух байтов ( 5 + 7 бит )
0001xxxx - это начало цепочки битов из трёх байтов ( 4 + 14 бит )
00001xxx - это начало цепочки битов из четырёх байтов ( 3 + 21 бит )
000001xx - это начало цепочки битов из пяти байтов ( 2 + 28 бит )
0000001x - это начало цепочки битов из шести байтов ( 1 + 35 бит )
00000001 - это начало цепочки битов из семи байтов ( 49 бит )

Во-первых, число от 1 до 7 представимо 3 разрядами, во-вторых ЭВМ приспособлены под степени двойки, а число 1, 2, 4 или 8 представимо 2 разрядами.
В-третьих, числа в скобках непонятны. Наконец, что с распределенными обработками?

Осталось только сделать список кодовых точек таким образом, чтобы первые 64 символа это были русские буквы (33+31).

Вместо того, чтобы сделать первыми цифры и легко обрабатывать числа произвольной длины.

Отредактировано MihalNik (2019-04-01 18:41:35)

0

8

atzx написал(а):

Вообще, в чём смысл делать свою ни-с-чем-несовместимую кодировку? Какие преимущества она даст?

- Воот! "ни-с-чем-несовместимы" они - как раз-таки сейчас.
- В любой из кодировок.
- "Кубик Рубика", панимаиш-ли...
- А зачем его собирать? (да ещё для каждого из народностей)
- Ладно так! Вот как есть в алхвавите - так и впихну, "ничтожа сумяшеся", в надлежащую ему нишу. - А чё... )))
atzx не пробовал писать проги озвучки текста? Я тоже пока не пробовал. И покуда не стану. Когда звуки сгруппирую в соответствии с их происхождением - вот тогда и посмотрим...

0

9

Нет, не пробовал. А это как-то косвенно может повлиять на кодировку?

Сандро написал(а):

"ни-с-чем-несовместимы" они - как раз-таки сейчас

Ну, atzx имел ввиду что имеющиеся кодировки совместимы с операционными системами, редакторами, браузерами. UTF-8 как правило понимают все, что уже большой прогресс по сравнению с кучей однобайтовых кодировок.

0

10

atzx написал(а):

уже большой прогресс по сравнению с кучей однобайтовых кодировок.

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

Отредактировано Сандро (2019-04-01 20:50:45)

0

11

atzx написал(а):
Лис написал(а):

Если так сделали для UTF-16 и UTF-8, то почему не сделали для всех остальных вариантов?

Потому что все остальные варианты - были до UTF-8, была куча несовместимых кодировок, разных в разных ОС.

Я имею в виду:
UTF-8 LE, UTF-8 BE, CESU-8 LE, CESU-8 BE, UTF-8B, UTF-8N, MUTF-8, WTF-8,  RFC 3629

0

12

MihalNik написал(а):

В-третьих, числа в скобках непонятны.

Это основная проблема. Они такие чтобы добиться некоторых особых свойств:
- самосинхронизация кодировки
- при оставлении возможности кодирования одним байтом

MihalNik написал(а):

Наконец, что с распределенными обработками?

Мне непонятно, что такое "распределённые обработки" (применительно к строкам).
Глядя на фрагмент строки в несколько байт можно определить где её можно разрезать на части,
и дальше обрабатывать части параллельно.

MihalNik написал(а):

ЭВМ приспособлены под степени двойки, а число 1, 2, 4 или 8 представимо 2 разрядами.

Разверни, пожалуйста, твою мысль.

Пусть первый байт такой
1xybbbbb, где 1 - это признак начала символа, xy - это код для числа последующих байтов, bbbbb - это 32 стартовых символа.
Мы не в Белоруссии/Беларуси, 32-х символов под алфавит не хватит, а значит буквы будут кодироваться не одним байтом,
а двумя и все тексты станут вдвое длиннее.

Отредактировано Лис (2019-04-01 23:42:07)

0

13

А может часть латинских букв которые аналогичны по написанию с русскими вообще выкинуть? Какой смысл в отдельной англ. "M" и отдельной русской "М"? Они же для человека неразличимы!

0

14

В таблице из стартового поста от 2019-03-31 нет символа пробела, забыл :)

У кодировки РУНА-1251 тоже такая проблема - пробел-то не в той части, где русские буквы...

Меня ещё всегда удивляло, почему символ "перевод строки" не кодируется нулевым кодом. Ведь в языке "C" строки нулём заканчиваются. И тогда буквы бы начинались с кода 1, т.е. как обычно считают - первый, второй (а не как программисты - нулевой, первый).

[html]<hr />[/html]

Есть ещё вариант - кодировать не таблицей 16x16,
а таблицей 26*10,
первая буква - согласная. вторая гласная (гласных как раз десять).
К сожалению:
1) согласных не хватит
    согласных букв — 21: б, в, г, д, й, ж, з, к, л, м, н, п, р, с, т, ф, х, ц, ч, ш, щ
    2 буквы, не обозначающие звуков: ь, ъ
    10 букв гласных: а, о, у, ы, э, я, е, ё, ю, и
2) в таком варианте теряется свойство побитовости...

"В языках типа русского, во многих языках, даже в большинстве, гортань используется очень слабо, но есть языки, где гортанная артикуляция очень активная и используется широко. Таким образом получается характерный оттенок, акцент. Например, гортань можно сжать. В классическом арабском языке с помощью таких гортанных артикуляций появляются даже специальные буквы."

Посмотреть на международный фонетический алфавит (МФА), чтобы добрать?
"По состоянию на 2005 год МФА включает 107 символов-букв, 52 символа — диакритических знака и 4 символа — знака просодии."

Главный принцип МФА — предоставить отдельный символ для каждого различимого звука. То есть он не использует комбинации букв для отображения одного звука, или одну букву для отображения нескольких звуков, нет букв, звучание которых (звуковые значения) зависит от контекста. Не встречается различных букв для двух звуков, если ни один из известных языков не делает между ними различия (это свойство известно как «селективность».

Проблема в том, что МФА в школе не учат.

Вот Уткин обвиняет Лиса в неинтернациональном подходе. А как по-другому-то? Не получится интернациональным быть, потому что в школе такому не учат.

Кроме переписывания курса русского языка, нужно ещё математику переписать. Про координатную плоскость, чтобы ось ординат была направлена вниз. Ведь пишем мы слева-направо, сверху-вниз.

И оси подписывать русскими буквами - В и Г (вертикаль и горизонталь)

Отредактировано Лис (2019-07-09 06:55:16)

0

15

Ведь в языке "C" строки нулём заканчиваются.

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

т.е. как обычно считают - первый, второй (а не как программисты - нулевой, первый).

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

Вот Уткин обвиняет Лиса в неинтернациональном подходе. А как по-другому-то? Не получится интернациональным быть, потому что в школе такому не учат.

А Вы попробуйте закончить школу и идти по жизни дальше :).

Проблема в том, что МФА в школе не учат.

В школе многому не учат, например, там не учат тому, что в Си строки заканчиваются нулем. Но это же Вас не остановило. Непонятно почему здесь Вы чего-то испугались...

Про координатную плоскость, чтобы ось ординат была направлена вниз.

Лис и в школьной математике и школьной физике есть такая фигня, как система координат и точка отсчета :). Рекомендую освежить знания.

И оси подписывать русскими буквами - В и Г (вертикаль и горизонталь)

https://www.meme-arsenal.com/memes/ab53fff2ebd5551921c4ee95fe89e4a5.jpg
А чего сразу не рунами?

0

16

А чтобы штучные байты кодировок (РУНА и ЯОРЯ) совпадали, сделать так:

[html]
<table border="1" cellspacing="0" cellpadding="3">

<tr><th>О</th><td>ПС</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>+</td><td>&times;</td><td>-</td><td>/</td><td>^</td></tr>

<tr><th>Е</th><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><th>А</th><td>©</td><td>®</td><td>™</td><td>&curren;</td><td>₿</td><td>#</td><td>¥</td><td>€</td><td>$</td><td>@</td><td>&</td><td>*</td><td>|</td><td>\</td><td>↑</td><td> ↓</td></tr>
<tr><th>И</th><td>&deg;</td><td>¶</td><td>`</td><td>'</td><td>"</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><th>Н</th><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>æ</td><td>Æ</td><td>a</td><td>b</td><td>c</td><td>d</td></tr>
<tr><th>Т</th><td>e</td><td>f</td><td>g</td><td>h</td><td>i</td><td>j</td><td>k</td><td>l</td><td>m</td><td>n</td><td>o</td><td>p</td><td>q</td><td>r</td><td>s</td><td>t</td></tr>
<tr><th>С</th><td>u</td><td>v</td><td>w</td><td>x</td><td>y</td><td>z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td></tr>
<tr><th>Р</th><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr>

<tr><th>В</th><td>а</td><td>б</td><td>в</td><td>г</td><td>д</td><td>е</td><td>ё</td><td>ж</td><td>з</td><td>и</td><td>й</td><td>к</td><td>л</td><td>м</td><td>н</td><td>о</td></tr>
<tr><th>Л</th><td>п</td><td>р</td><td>с</td><td>т</td><td>у</td><td>ф</td><td>х</td><td>ц</td><td>ч</td><td>ш</td><td>щ</td><td>ъ</td><td>ы</td><td>ь</td><td>э</td><td>ю</td></tr>

<tr><th>К</th><td>я</td><td>А</td><td>Б</td><td>В</td><td>Г</td><td>Д</td><td>Е</td><td>Ё</td><td>Ж</td><td>З</td><td>И</td><td>Й</td><td>К</td><td>Л</td><td>М</td><td>Н</td></tr>
<tr><th>М</td><td>О</td><td>П</td><td>Р</td><td>С</td><td>Т</td><td>У</td><td>Ф</td><td>Х</td><td>Ц</td><td>Ч</td><td>Ш</td><td>Щ</td><td>Ъ</td><td>Ы</td><td>Ь</td><td>Э</td></tr>
<tr><th>Д</th><td>Ю</td><td>Я</td><td>а́</td><td>е́</td><td>ё́</td><td>и́</td><td>о́</td><td>у́</td><td>ы́</td><td>э́</td><td>ю́</td><td>я́</td><td>А́</td><td>Е́</td><td>Ё́</td><td>И́</td></tr>
<tr><th>П</th><td>О́</td><td>У́</td><td>Ы́</td><td>Э́</td><td>Ю́</td><td>Я́</td><td>₽</td><td>.</td><td>?</td><td>!</td><td>,</td><td>;</td><td>:</td><td>...</td><td>&mdash;</td><td>_</td></tr>

<tr><th>У</th><td>(</td><td>)</td><td>[</td><td>]</td><td>{</td><td>}</td><td>⟨ </td><td>⟩</td><td>⸨</td><td>⸩</td><td>⟦</td><td>⟧</td><td>❴ </td><td>❵</td><td>《</td><td>》</td></tr>

<tr><th>Я</th><td>&lt;</td><td>&gt;</td><td>&le;</td><td>&ge;</td><td>&laquo;</td><td>&raquo;</td><td>„</td><td>”</td><td>=</td><td>≠</td><td>§</td><td>№</td><td>&bull;</td><td>%</td><td>~</td><td>СП</td></tr>

<tr><th>&nbsp;</th><th>О</th><th>Е</th><th>А</th><th>И</th><th>Н</th><th>Т</th><th>С</th><th>Р</th><th>В</th><th>Л</th><th>К</th><th>М</th><th>Д</th><th>П</th><th>У</th><th>Я</th></tr>

</table>
по вертикали первый квартет битов (старший, пишется правее), по горизонтали второй квартет битов (младший, пишется левее),
Таком образом байт с символом пробел будет записан буквами как 'ЯЯ'. Перевод строки (конец строки) - 'ОО'.
Называть таблицу "ООЯЯ-19-07", а кодировку - РУНА-ООЯЯ.
[/html]
Первая половина таблицы использоваться не будет (т.е. по оси "в" (вертикали) будут использоваться только менее часто используемая половина букв), можно развернуть нумерацию:
[html]
<table border="1" cellspacing="0" cellpadding="3">

<tr><th>Я</th><td>ПС</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>+</td><td>&times;</td><td>-</td><td>/</td><td>^</td></tr>

<tr><th>У</th><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><th>П</th><td>©</td><td>®</td><td>™</td><td>&curren;</td><td>₿</td><td>#</td><td>¥</td><td>€</td><td>$</td><td>@</td><td>&</td><td>*</td><td>|</td><td>\</td><td>↑</td><td> ↓</td></tr>
<tr><th>Д</th><td>&deg;</td><td>¶</td><td>`</td><td>'</td><td>"</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><th>М</th><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>æ</td><td>Æ</td><td>a</td><td>b</td><td>c</td><td>d</td></tr>
<tr><th>К</th><td>e</td><td>f</td><td>g</td><td>h</td><td>i</td><td>j</td><td>k</td><td>l</td><td>m</td><td>n</td><td>o</td><td>p</td><td>q</td><td>r</td><td>s</td><td>t</td></tr>
<tr><th>Л</th><td>u</td><td>v</td><td>w</td><td>x</td><td>y</td><td>z</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td></tr>
<tr><th>В</th><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr>

<tr><th>Р</th><td>а</td><td>б</td><td>в</td><td>г</td><td>д</td><td>е</td><td>ё</td><td>ж</td><td>з</td><td>и</td><td>й</td><td>к</td><td>л</td><td>м</td><td>н</td><td>о</td></tr>
<tr><th>С</th><td>п</td><td>р</td><td>с</td><td>т</td><td>у</td><td>ф</td><td>х</td><td>ц</td><td>ч</td><td>ш</td><td>щ</td><td>ъ</td><td>ы</td><td>ь</td><td>э</td><td>ю</td></tr>

<tr><th>Т</th><td>я</td><td>А</td><td>Б</td><td>В</td><td>Г</td><td>Д</td><td>Е</td><td>Ё</td><td>Ж</td><td>З</td><td>И</td><td>Й</td><td>К</td><td>Л</td><td>М</td><td>Н</td></tr>
<tr><th>Н</td><td>О</td><td>П</td><td>Р</td><td>С</td><td>Т</td><td>У</td><td>Ф</td><td>Х</td><td>Ц</td><td>Ч</td><td>Ш</td><td>Щ</td><td>Ъ</td><td>Ы</td><td>Ь</td><td>Э</td></tr>
<tr><th>И</th><td>Ю</td><td>Я</td><td>а́</td><td>е́</td><td>ё́</td><td>и́</td><td>о́</td><td>у́</td><td>ы́</td><td>э́</td><td>ю́</td><td>я́</td><td>А́</td><td>Е́</td><td>Ё́</td><td>И́</td></tr>
<tr><th>А</th><td>О́</td><td>У́</td><td>Ы́</td><td>Э́</td><td>Ю́</td><td>Я́</td><td>₽</td><td>.</td><td>?</td><td>!</td><td>,</td><td>;</td><td>:</td><td>...</td><td>&mdash;</td><td>_</td></tr>

<tr><th>Е</th><td>(</td><td>)</td><td>[</td><td>]</td><td>{</td><td>}</td><td>⟨ </td><td>⟩</td><td>⸨</td><td>⸩</td><td>⟦</td><td>⟧</td><td>❴ </td><td>❵</td><td>《</td><td>》</td></tr>

<tr><th>О</th><td>&lt;</td><td>&gt;</td><td>&le;</td><td>&ge;</td><td>&laquo;</td><td>&raquo;</td><td>„</td><td>”</td><td>=</td><td>≠</td><td>§</td><td>№</td><td>&bull;</td><td>%</td><td>~</td><td>СП</td></tr>

<tr><th>&nbsp;</th><th>Я</th><th>У</th><th>П</th><th>Д</th><th>М</th><th>К</th><th>Л</th><th>В</th><th>Р</th><th>С</th><th>Т</th><th>Н</th><th>И</th><th>А</th><th>Е</th><th>О</th></tr>

</table>
по вертикали первый квартет битов (старший, пишется правее), по горизонтали второй квартет битов (младший, пишется левее),
Таком образом байт с символом пробел будет записан буквами как 'ОО'. Перевод строки (конец строки) - 'ЯЯ'.
Называть таблицу "ЯО-19-07", а кодировку - РУНА-ЯО.
[/html]

Отредактировано Лис (2019-07-09 10:13:17)

0

17

utkin написал(а):

А чего сразу не рунами?

Обсуждение этой идеи здесь - Международный фонетический алфавит

0

18

Эта кодировка имеет упущение - она не позволяет кодировать церковнославянский язык.

Unicode тоже не позволяет:
http://www.irmologion.ru/developer/fontdev4.html

Зато это отличный аргумент для обоснования необходимости своей кодировки, отличной от Unicode.

0

19

См. также
КРЯ-8 - альтернатива УПС-8 (UTF-8)

01xxxxxx - это начало цепочки битов из одного байта ( 6 + 0 бит )
001xxxxx - это начало цепочки битов из двух байтов ( 5 + 7 бит )
0001xxxx - это начало цепочки битов из трёх байтов ( 4 + 14 бит )
00001xxx - это начало цепочки битов из четырёх байтов ( 3 + 21 бит )
000001xx - это начало цепочки битов из пяти байтов ( 2 + 28 бит )
0000001x - это начало цепочки битов из шести байтов ( 1 + 35 бит )
00000001 - это начало цепочки битов из семи байтов ( 49 бит )
1xxxxxxxx - это байт продолжения
00000000 - это специальная последовательность (для обозначения чего-нибудь, например конца строки)

Как вариант:
00000000 - это специальная последовательность (для обозначения чего-нибудь, например конца строки)
00010000 - это разделитель слов (пробел)
0001xxxx - это 16 букв с титлом (ноль совпадает по коду с пробелом и это плохо, не годится)
  лучше что-нибудь, что не влезло в кодировку УТКА-128 (10 цифр, 4 действия + - * ", знак равенства, но в целом это неважно, всё равно всё ломается)
  тогда это 15 каких-то знаков пунктуации (одиночный апостроф ', .:,; , \|/_ , парные скобки [](){})
001nxxxx - начало (n+2)-байтового кода (0 - два байта (11 полезных битов), 1 - три (18 битов))
01nnxxxx - начало (nn+4)-байтового кода (00 - четыре байта (25 битов), 01 - пять, 10 - шесть, 11 - семь)
   ^ ^ ^ во славу MihalNik-а (фактически, первые 4 бита - это количество байтов, кроме спецслучаев)
1xxxxxxxx - это байт продолжения

проблема - из однобайтовых символов только специальные знаки, пробел и конец строки.
Но может это и к лучшему с точки зрения международного приятия.

46 бит = 4 + 7 * 6 (всего 7 байтов)
39 бит = 4 + 7 * 5 (всего 6 байтов)
32 бита = 4 + 7 * 4 (всего 5 байтов)
25 битов = 4 + 7 * 3 (всего 4 байта)
18 битов = 4 + 7 * 2 (всего 3 байта)
11 битов = 4 + 7 * 1 (всего 2 байта)

Всю UTF-8 можно утолкать в 25 битов -
(см. выше «
1xxxxxxx - это байт с выбранной кодировкой (7 бит)
001xxxxx - это начало цепочки битов из двух байтов ( 5 + 6 = 11 бит )
0001xxxx - это начало цепочки битов из трёх байтов ( 4 + 12 = 16 бит )
00001xxx - это начало цепочки битов из четырёх байтов ( 3 + 18 = 21 бит )
»)

Поэтому вместо 01nnxxxx можно разместить 64 русские буквы, как я предлагал ранее
нет, не получится. Там тогда 18 бит остаётся, а это меньше 21

Есть, в общем, где развернуться,

Пусть такой способ кодирования называется КИЧ-8 (кодировка, избыточная четырёхбитно).

Трёхбайтовый маркер порядка байтов/битов и типа файла/кодировки надо будет потом придумать.

-----

Разница между КРЯ-8 и КИЧ-8 в том, что первую кодировку можно использовать в однобайтном режиме, а вторую - нет.

Предположим, что мы не будем добиваться совместимости с ASCII.
Тогда можно поместить 128 символов в нижную половину (как у американцев сейчас)
и использовать UTF-8 так же как американцы (но у них криво! в том смысле, что всего по 6 битов на каждый байт продолжения вместо 7).

1xxxxxxx - семибитовый символ (из таблицы на 128 символов)
Если байт выглядит как 01xxxxxx, то является продолжающим байтом символа и содержит в себе 6 битов информации о символе.
00nnxxxx - начало многобайтового кода (nn+1 байтов, 01 - два, 10 - три, 11 - четыре, больше всё равно не бывает в UTF-8)
0000xxxx - четырнадцать символов, 0123456789, =+-* (их нет в таблице КРЯ-128)
00000001 - разделитель слов
00000000 - разделитель строк

Назову КИМ-8 (кодировка инспирированная МихалНиком)
- можно использовать для русских текстов в однобайтовом режиме
- по ёмкости не хуже текущей UTF-8

Можно было бы поменять местами первый младший бит и шестой, чтобы пробел имел код 20, но... всё равно КРЯ-128 не совпадает с КОИ-8, смысла нет.
А если использовать КОИ-8, то у нас нет на нём текстов. Вот так просто - всё давно в UTF-8 (а кому надо - идеи все изложены, будет ещё один стандарт).
или два бита:
00xxxxnn - начало многобайтового кода (nn+1 байтов, 01 - два, 10 - три, 11 - четыре, больше всё равно не бывает в UTF-8)
00100000 - разделитель слов
00xxxx00 - четырнадцать символов, 0123456789, =+-* (их нет в таблице КРЯ-128).
    Или можно ASCII символы взять, они тоже в таблице не все   ! # $ % & ' (только восклицательный знак)
    (7 символов попадут в зарезервированную область ASCII, ну и фиг с ними)
00000000 - разделитель строк

Назову КCЯ-8 (кодировка совместимая языковая)

Преимущества кодировки КСЯ-8:
- можно использовать для русских текстов в однобайтовом режиме
- по ёмкости не хуже текущей UTF-8
- потенциальная возможность замены на КОИ-8Р (или такого типа кодировку, на Win-1251, например = КСЯ-1251)

Точнее надо ещё переставить биты, чтобы символы брались подряд.
1xxxxxxx - семибитовый символ (из таблицы на 128 символов)
01xxxxxx - байт продолжения с 6 полезными битами
00100000 - разделитель слов
00100xxx - семь полезных символов из ASCII, теперь они идут подряд (не восемь, потому что комбинация 000 исключена)
00000xxx - семь бесполезных символов из ASCII, теперь они идут подряд (не восемь, потому что комбинация 000 исключена)
00000000 - разделитель строк
00xnnxxx - начало многобайтового кода (nn+1 байтов, 01 - два, 10 - три, 11 - четыре, больше всё равно не бывает в UTF-8)

КСМ - кодировка сильно модифицированная
Преимущества:
- можно использовать для русских текстов в однобайтовом режиме
- по ёмкости не хуже текущей UTF-8
- можно написать кириллический текст в ней так, что он будет одновременно и текстом в Win-1251 (если там не будет скобок и некоторых других символов из нижней половины ASCII-таблицы)

Стоит ли такая фича вот этих всех мучений и создания стада стандартов?
Бутстрап-то мы собираемся делать с линукса, а не с Windows.
Значит и дополнительного удобства редактирования не получаем.

Отредактировано Лис (Сегодня 07:40:52)

0