Вопросы и задания по теме «Алфавитный подход к измерению информации»

Вопросы и задания по теме «Алфавитный подход к измерению информации»

Вопросы и задания:

1.    Перечислите известные вам свойства информации.

2.    Приведите примеры получения и использования информации человеком.

3.    Перечислите известные вам носители информации.

4.    Укажите известные вам единицы измерения информации.

5.    Опишите известные вам способы кодирования информации.

6.    Что такое код, кодирование?

7.    Подсчитать информационный объем учебника информатики.

8.    Пусть 00000001, 00000100, 00001001– 8-разрядные двоичные коды цифр 1, 3, 9.

Закодируйте число 1993.

 

Задачи:

 

1.        Алфавит племени Мульти состоит из 8 букв. Какое количество информации несет одна буква этого алфавита?   

2.        Сообщение, записанное буквами из 64-х символьного алфавита, содержит 20 символов. Какой объем информации оно несет?

3.        Племя Мульти имеет 32-х символьный алфавит. Племя Пульти использует 64-х символьный алфавит. Вожди племен обменялись письмами. Письмо племени Мульти содержало 80 символов, а письмо племени Пульти — 70 символов. Сравните объемы информации, содержащейся в письмах. 

4.        Информационное сообщение объемом 1,5 Кбайта содержит 3072 символа. Сколько символов содержит алфавит, при помощи которого было записано это сообщение?        

5.        Объем сообщения, содержащего 2048 символов составил 1/512 часть Мбайта. Каков размер алфавита, с помощью которого записано сообщение?

6.        Сколько символов содержит сообщение, записанное с помощью 16-ти символьного алфавита, если объем его составил  1/16 часть Мбайта? 

7.        Сколько килобайтов составляет сообщение, содержащее 12288 битов?

8.        Сколько килобайтов составит сообщение из

384 символов 16-ти символьного алфавита?                         

9.        Для записи текста использовался 256-символьный алфавит.      Каждая страница содержит 30 строк по 70 символов в строке.  Какой объем информации содержат 5 страниц текста?

10.     Сообщение занимает 3 страницы по 25 строк. В каждой строке записано по 60 символов. Сколько символов в использованном алфавите, если все сообщение содержит 1125 байтов?

11.     Для записи сообщения использовался 64-х символьный алфавит. Каждая страница содержит 30 строк.

Все  сообщение содержит 8775 байтов информации и занимает 6 страниц. Сколько символов в строке?

12.     Сообщение занимает 2 страницы и содержит 1/16 Кбайта информации. На каждой странице записано 256 символов. Какова мощность использованного алфавита?

13.     Каков  информационный объем сообщения: «Встреча назначена на сентябрь» (в байтах, в битах)?

 

В МЕНЮ

Используются технологии uCoz

Контрольная работа на тему «Измерение информации и системы счисления». 16 вариантов с ответами, в каждом по 10 задач.

Вариант 1

1. Переведите двоичное число 101012 в десятичную систему счисления.

21

2. Переведите 3218 в 16-ю систему счисления.

D1

3. Сколько различных символов можно закодировать 4 битами?

16

4. Напишите, каков информационный объем сообщения Опять, двойка! в байтах?

14

5. Информационный объем книги в 360 страниц равен 360 Кбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

1024b

6. Объем сообщения, содержащего 2048 символов, составил 1 Кбайт. Каков размер алфавита, с помощью которого закодировано сообщение?16

7. Световое табло состоит из лампочек. Каждая лампочка может находиться в одном из трех состояний («включено», «выключено» или «мигает»). Какое наименьшее количество лампочек должно находиться на табло, чтобы с его помощью можно было передать 18 различных сигналов?

3

8. Сколько мегабайт информации содержит сообщение объемом 223 бит?

1Mb

9. Сколько единиц в двоичной записи числа 204?

4

10. Вычислите сумму чисел x и y, при x = D616, y = 368.

Результат представьте в двоичной системе счисления.

11110100

Вариант 2

1. Переведите двоичное число 110002 в десятичную систему счисления.

24

2. Переведите 3248 в 16-ю систему счисления.

D4

3. Сколько различных символов можно закодировать 5 битами?

32

4. Напишите, каков информационный объем сообщения Осторожно! Машина. в байтах?

18

5. Информационный объем книги в 360 страниц равен 720 Кбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

2048b

6. Объем сообщения, содержащего 1024 символа, составил 512 байт. Каков размер алфавита, с помощью которого закодировано сообщение?

16

7. В соревновании участвуют 215 атлетов.

Какое минимальное количество бит необходимо, чтобы кодировать номер каждого атлета?

8

8. Скорость передачи данных через ADSL-соединение равна 1024000 бит/c. Через данное соединение передают файл размером 2000 килобайт. Определите время передачи файла в секундах.

16

9. Количество цифр в двоичной записи десятичного числа, которое можно представить в виде 2+8+16+ 64+128+256+512, равно

10

10. Вычислите сумму чисел x и y,

при x = D716, y = 468. Результат представьте в двоичной системе счисления.

11111101

Вариант 3

1. Переведите двоичное число 111012 в десятичную систему счисления.

29

2. Переведите 3258 в 16-ю систему счисления.

D5

3. Сколько различных символов можно закодировать 2 битами?

4

4. Напишите, каков информационный объем сообщения Колобок, колобок, я тебя съем. в байтах?

30

5. Информационный объем книги в 720 страниц равен 1440 Кбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

2048b

6. Объем сообщения, содержащего 4096 символа, составил 2 Кбайта. Каков размер алфавита, с помощью которого закодировано сообщение?

16

7. Каждый символ в Unicode закодирован двухбайтным словом. Оцените информационный объем следующей строки в этой кодировке:

Единый государственный экзамен по ИНФОРМАТИКЕ

90b

8. Световое табло состоит из лампочек. Каждая лампочка может находиться в одном из трех состояний («включено», «выключено» или «мигает»). Какое наименьшее количество лампочек должно находиться на табло, чтобы с его помощью можно было передать 8 различных сигналов?

2

9. Для передачи секретного сообщения используется код, состоящий из заглавных латинских букв и цифр (всего используется 36 различных символов). При этом все символы кодируются одним и тем же (минимально возможным) количеством бит. Определите информационный объем сообщения длиной в 160 символов.

960bit 120b

10. Для хранения растрового изображения размером 32×64 пикселя отвели 512 байт памяти. Каково максимально возможное число цветов в палитре изображения?

4

Вариант 4

1. Переведите двоичное число 101102 в десятичную систему счисления.

22

2. Переведите 3268 в 16-ю систему счисления.

D6

3. Сколько различных символов можно закодировать 3 битами?

8

4. Напишите, каков информационный объем сообщения Уходя, выключи свет! в байтах?

20

5. Информационный объем книги в 1440 страниц равен 2880 Кбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

2048b

6. Объем сообщения, содержащего 3072 символа, составил 1536 байт. Каков размер алфавита, с помощью которого закодировано сообщение?

16

7. Вычислите сумму чисел x и y, при x

= E716, y = 458.

Результат представьте в двоичной системе счисления.

100001100

8. Укажите минимальный объем памяти (в байтах), достаточный для хранения любого растрового изображения размером 8 х 32 пикселей, если известно, что в изображении используется палитра из 256 цветов. Саму палитру хранить не нужно.

2048b

9. Скорость передачи данных через ADSL-соединение равна 512000 бит/c. Передача файла через это соединение заняла 16 секунд. Определите размер файла в килобайтах.

1000Kb

10. Сколько единиц в двоичной записи числа 199?

5

Вариант 5

1. Переведите двоичное число 101112 в десятичную систему счисления.

23

2. Переведите 3418 в 16-ю систему счисления.

E1

3. Сколько различных символов можно закодировать 6 битами?

64

4. Напишите, каков информационный объем сообщения Не смотри в окно! в байтах?

17b

5. Информационный объем книги в 1800 страниц равен 720 Кбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

409.6b

6. Объем сообщения, содержащего 1536 символов, составил 2 Кбайт. Каков размер алфавита, с помощью которого закодировано сообщение?

1664

7. Световое табло состоит из лампочек. Каждая лампочка может находиться в одном из двух состояний («включено», «выключено»). Какое наименьшее количество лампочек должно находиться на табло, чтобы с его помощью можно было передать 17 различных сигналов?

5

8. Сколько мегабайт информации содержит сообщение объемом 225 бит?

4Mb

9. Сколько единиц в двоичной записи числа 215?

6

10. Вычислите сумму чисел x и y, при x = DВ16, y = 378.

Результат представьте в двоичной системе счисления.

11111010

Вариант 6

1. Переведите двоичное число 110102 в десятичную систему счисления.

26

2. Переведите 4248 в 16-ю систему счисления.

114

3. Сколько различных символов можно закодировать 7 битами?

128

4. Напишите, каков информационный объем сообщения Слушайте! Тишина. в байтах?

17

5. Информационный объем книги в 540 страниц равен 512 Кбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

970.9b

6. Объем сообщения, содержащего 2048 символа, составил 512 байт. Каков размер алфавита, с помощью которого закодировано сообщение?

4

7. В соревновании участвуют 126 атлетов. Какое минимальное количество бит необходимо, чтобы кодировать номер каждого атлета?

7

8. Скорость передачи данных через ADSL-соединение равна 1536000 бит/c. Через данное соединение передают файл размером 2000 килобайт. Определите время передачи файла в секундах.

11

9. Количество цифр в двоичной записи десятичного числа, которое можно представить в виде 2+8+16+ 64+128+256+512, равно

10

10. Вычислите сумму чисел x и y, при x = А716, y = 168. Результат представьте в двоичной системе счисления.

10110101

Вариант 7

1. Переведите двоичное число 1101012 в десятичную систему счисления.

53

2. Переведите 3178 в 16-ю систему счисления.

CF

3. Сколько различных символов можно закодировать 8 битами?

256

4. Напишите, каков информационный объем сообщения Сегодня очень весело! в байтах?

11

5. Информационный объем книги в 240 страниц равен 1526 Кбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

6511b

6. Объем сообщения, содержащего 4096 символа, составил 2 Мбайта. Каков размер алфавита, с помощью которого закодировано сообщение?

24096

7. Каждый символ в Unicode закодирован двухбайтным словом. Оцените информационный объем следующей строки в этой кодировке: Впереди у нас холод и снег.

54b

8. Световое табло состоит из лампочек. Каждая лампочка может находиться в одном из двух состояний («включено», «выключено»). Какое наименьшее количество лампочек должно находиться на табло, чтобы с его помощью можно было передать 8 различных сигналов?

3

9. Для передачи секретного сообщения используется код, состоящий из заглавных латинских букв и цифр (всего используется 31 различный символ). При этом все символы кодируются одним и тем же (минимально возможным) количеством бит. Определите информационный объем сообщения длиной в 150 символов.

750bit

10. Для хранения растрового изображения размером 16х64 пикселя отвели 512 Кбайт памяти. Каково максимально возможное число цветов в палитре изображения?

24096

Вариант 8

1. Переведите двоичное число 1101102 в десятичную систему счисления.

54

2. Переведите 3768 в 16-ю систему счисления.

FE

3. Сколько различных символов можно закодировать 16 битами?

65536

4. Напишите, каков информационный объем сообщения Уходя, — уходи! в байтах?

15

5. Информационный объем книги в 2560 страниц равен 512 Мбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

209715.2b

6. Объем сообщения, содержащего 3072 символа, составил 1536 Кбайт. Каков размер алфавита, с помощью которого закодировано сообщение?

24096

7. Вычислите сумму чисел x и y, при x = EС16, y = 258. Результат представьте в двоичной системе счисления.

100000001

8. Укажите минимальный объем памяти (в байтах), достаточный для хранения любого растрового изображения размером 64 х 32 пикселей, если известно, что в изображении используется палитра из 64 цветов. Саму палитру хранить не нужно.

1536

9. Скорость передачи данных через ADSL-соединение равна 2048000 бит/c. Передача файла через это соединение заняла 24 секунды. Определите размер файла в килобайтах.

6000b

10. Сколько единиц в двоичной записи числа 124?

5

Вариант 9

1. Переведите двоичное число 1111012 в десятичную систему счисления.

61

2. Переведите 5218 в 16-ю систему счисления.

151

3. Сколько различных символов можно закодировать 4 битами?

16

4. Напишите, каков информационный объем сообщения Если ничего не делать, то двойку получишь! в байтах?

42

5. Информационный объем книги в 360 страниц равен 180 Мбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

524288

6. Объем сообщения, содержащего 1536 символов, составил 20 Кбайт. Каков размер алфавита, с помощью которого закодировано сообщение?

213..3

7. Световое табло состоит из лампочек. Каждая лампочка может находиться в одном из трех состояний («включено», «выключено» или «мигает»). Какое наименьшее количество лампочек должно находиться на табло, чтобы с его помощью можно было передать 27 различных сигналов?

3

8. Сколько мегабайт информации содержит сообщение объемом 227 бит?

16Mb

9. Сколько единиц в двоичной записи числа 402?

4

10. Вычислите сумму чисел x и y, при x = D316, y = 168.

Результат представьте в двоичной системе счисления.

11100001

Вариант 10

1. Переведите двоичное число 1101002 в десятичную систему счисления.

52

2. Переведите 2348 в 16-ю систему счисления.

9C

3. Сколько различных символов можно закодировать 5 битами?

32

4. Напишите, каков информационный объем сообщения Осторожно! Во дворе злая собака!. в байтах?

33b

5. Информационный объем книги в 360 страниц равен 720 Мбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

2097152

6. Объем сообщения, содержащего 1024 символа, составил 512 Кбайт. Каков размер алфавита, с помощью которого закодировано сообщение?

24096

7. В соревновании участвуют 63 атлетов. Какое минимальное количество бит необходимо, чтобы кодировать номер каждого атлета?

6

8. Скорость передачи данных через ADSL-соединение равна 1024000 бит/c. Через данное соединение передают файл размером 1000 килобайт. Определите время передачи файла в секундах.

8

9. Количество цифр в двоичной записи десятичного числа, которое можно представить в виде 2+8+16+ 64+128+256+512, равно

10

10. Вычислите сумму чисел x и y, при x = D916, y = 268. Результат представьте в двоичной системе счисления.

11101111

Вариант 11

1. Переведите двоичное число 10011012 в десятичную систему счисления.

77

2. Переведите 1558 в 16-ю систему счисления.

6D

3. Сколько различных символов можно закодировать 8 битами?

256

4. Напишите, каков информационный объем сообщения Колобок, колобок, я тебя есть не хочу. в байтах?

38

5. Информационный объем книги в 720 страниц равен 1440 Кбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

2048

6. Объем сообщения, содержащего 4096 символа, составил 2 Кбайта. Каков размер алфавита, с помощью которого закодировано сообщение?

16

7. Каждый символ в Unicode закодирован двухбайтным словом. Оцените информационный объем следующей строки в этой кодировке:Ах, эти символы, символы!

50

8. Световое табло состоит из лампочек. Каждая лампочка может находиться в одном из трех состояний («включено», «выключено» или «мигает»). Какое наименьшее количество лампочек должно находиться на табло, чтобы с его помощью можно было передать 15 различных сигналов?

3

9. Для передачи секретного сообщения используется код, состоящий из заглавных латинских букв и цифр (всего используется 17 различных символов). При этом все символы кодируются одним и тем же (минимально возможным) количеством бит. Определите информационный объем сообщения длиной в 240 символов.

1200

10. Для хранения растрового изображения размером 16х64 пикселя отвели 512 Кбайт памяти. Каково максимально возможное число цветов в палитре изображения?

24096

Вариант 12

1. Переведите двоичное число 10101102 в десятичную систему счисления.

86

2. Переведите 4668 в 16-ю систему счисления.

136

3. Сколько различных символов можно закодировать 3 битами?

8

4. Напишите, каков информационный объем сообщения Вперед, и только вперед!!! в байтах?

26

5. Информационный объем книги в 1536 страниц равен 2880 Мбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

1966080

6. Объем сообщения, содержащего 3072 символа, составил 1536 Кбайт. Каков размер алфавита, с помощью которого закодировано сообщение?

24096

7. Вычислите сумму чисел x и y, при x = E516, y = 258.

Результат представьте в двоичной системе счисления.

372

8. Укажите минимальный объем памяти (в байтах), достаточный для хранения любого растрового изображения размером 64 х 16 пикселей, если известно, что в изображении используется палитра из 16 цветов. Саму палитру хранить не нужно.

4096

9. Скорость передачи данных через ADSL-соединение равна 5120000 бит/c. Передача файла через это соединение заняла 32 секунды. Определите размер файла в килобайтах.

20000 Kb

10. Сколько единиц в двоичной записи числа 211?

5

Вариант 13

1. Переведите двоичное число 1010112 в десятичную систему счисления.

43

2. Переведите 1718 в 16-ю систему счисления.

79

3. Сколько различных символов можно закодировать 3 битами?

8

4. Напишите, каков информационный объем сообщения Гол! И снова гол. в битах?

136

5. Информационный объем книги в 720 страниц равен 360 Мбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

524288

6. Объем сообщения, содержащего 2048 символов, составил 3 Кбайт. Каков размер алфавита, с помощью которого закодировано сообщение?

4096

7. Световое табло состоит из лампочек. Каждая лампочка может находиться в одном из трех состояний («включено», «выключено» или «мигает»). Какое наименьшее количество лампочек должно находиться на табло, чтобы с его помощью можно было передать 9 различных сигналов?

2

8. Сколько мегабайт информации содержит сообщение объемом 228 бит?

32Mb

9. Сколько единиц в двоичной записи числа 54?

4

10. Вычислите сумму чисел x и y, при x = 8616, y = 168.

Результат представьте в двоичной системе счисления.

10010100

Вариант 14

1. Переведите двоичное число 11001002 в десятичную систему счисления.

100

2. Переведите 1148 в 16-ю систему счисления.

4C

3. Сколько различных символов можно закодировать 5 битами?

32

4. Напишите, каков информационный объем сообщения Осторожно! Стоять!. в битах?

19

5. Информационный объем книги в 720 страниц равен 360 Кбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

512

6. Объем сообщения, содержащего 2048 символа, составил 512 Кбайт. Каков размер алфавита, с помощью которого закодировано сообщение?

22048

7. В соревновании участвуют 375 атлетов. Какое минимальное количество бит необходимо, чтобы кодировать номер каждого атлета?

9

8. Скорость передачи данных через ADSL-соединение равна 4096000 бит/c. Через данное соединение передают файл размером 2000 килобайт. Определите время передачи файла в секундах.

4

9. Количество цифр в двоичной записи десятичного числа, которое можно представить в виде 2+8+16+ 64+128+256+512, равно

10

10. Вычислите сумму чисел x и y, при x = А416, y = 448. Результат представьте в двоичной системе счисления.

11001000

Вариант 15

1. Переведите двоичное число 10111012 в десятичную систему счисления.

93

2. Переведите 1358 в 16-ю систему счисления.

5D

3. Сколько различных символов можно закодировать 7 битами?

128

4. Напишите, каков информационный объем сообщения Привет! Всем привет!. в битах?

168

5. Информационный объем книги в 180 страниц равен 1440 Кбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

8192

6. Объем сообщения, содержащего 4096 символа, составил 2 Мбайта. Каков размер алфавита, с помощью которого закодировано сообщение?

24096

7. Каждый символ в Unicode закодирован двухбайтным словом. Оцените информационный объем следующей строки в этой кодировке:Я всегда решаю задачи на пять!

60

8. Световое табло состоит из лампочек. Каждая лампочка может находиться в одном из трех состояний («включено», «выключено» или «мигает»). Какое наименьшее количество лампочек должно находиться на табло, чтобы с его помощью можно было передать 17 различных сигналов?

3

9. Для передачи секретного сообщения используется код, состоящий из заглавных латинских букв и цифр (всего используется 15 различных символов). При этом все символы кодируются одним и тем же (минимально возможным) количеством бит. Определите информационный объем сообщения длиной в 160 символов.

640

10. Для хранения растрового изображения размером 32х16 пикселя отвели 512 Кбайт памяти. Каково максимально возможное число цветов в палитре изображения?

22048

Вариант 16

1. Переведите двоичное число 10111102 в десятичную систему счисления.

94

2. Переведите 3768 в 16-ю систему счисления.

FE

3. Сколько различных символов можно закодировать 5 битами?

32

4. Напишите, каков информационный объем сообщения Вперед к победе! в битах?

128

5. Информационный объем книги в 1536 страниц равен 2880 Кбайт. Напишите, каков информационный объем 1 страницы книги в байтах?

1920

6. Объем сообщения, содержащего 3072 символа, составил 1536 Кбайт. Каков размер алфавита, с помощью которого закодировано сообщение?

24096

7. Вычислите сумму чисел x и y, при x = E916, y = 258.

Результат представьте в двоичной системе счисления.

11111110

8. Укажите минимальный объем памяти (в байтах), достаточный для хранения любого растрового изображения размером 64 х 32 пикселей, если известно, что в изображении используется палитра из 64 цветов. Саму палитру хранить не нужно.

8192

9. Скорость передачи данных через ADSL-соединение равна 5120000 бит/c. Передача файла через это соединение заняла 16 секунд. Определите размер файла в килобайтах.

10000

10. Сколько единиц в двоичной записи числа 222?

6

Помощь моим ученикам | Образовательная социальная сеть

Решение задач

№ 1

Сообщение записано с помощью алфавита, содержащего 8 символов. Какое количество информации несет одна буква этого алфавита.

Решение: I = log28 = 3 бита.

Ответ: 3 бита.

№ 2

Информационный объем одного символа некоторого сообщения равен 6 битам. Сколько символов входит в алфавит, с помощью которого было составлено это сообщение?

Решение: N = 2I = 26 = 64 символа.

Ответ: 64 символа.

№ 3

Информационный объем одного символа некоторого сообщения равен 5 битам. Каковы пределы (максимальное и минимальное значение) мощности алфавита, с помощью которого составлено это сообщение?

Решение: N = 2I = 25 = 32 — максимальное значение мощности алфавита. Если символов будет больше хотя бы на один, то для кодирования понадобится 6 бит. Минимальное значение — 17 символов, т.к. для меньшего количества символов будет достаточно 4 бит.

Ответ: 4 бита.

№ 4

Сообщение, записанное буквами из 128-символьного алфавита, содержит 30 символов. Какой объем информации оно несет?

Дано: N = 128, К = 30.

Найти: Iт-?

Решение: 1. Iт = KI, неизвестно I;

2. I = log2N = log2128 = 7 бит — объем одного символа;

3. IТ = 30*7 = 210 бит — объем всего сообщения.

Ответ: 210 бит объем всего сообщения.

№ 5

Сообщение, составленное с помощью 32-символьного алфавита содержит 80 символов. Другое сообщение составлено с использованием 64-с вольного алфавита и содержит 70 символов. Сравните объемы информациии содержащейся в сообщениях.

Дано: NI= 32, КI = 80, N2 = 64, K2 = 70.

Найти: Iт1,Iт2.

Решение: 1. I1 = log2N! = log232 = 5 бит — объем одного символа первого сообщения;

2. I2 = log2N2 = log264 = 6 бит — объем одного символа второго сообщения;

3. Iт1 = Kl*1,1 = 80*5 = 400 бит — объем первого сообщения; 4. Iт2 = K2*I2 = 70*6 = 420 бит — объем второго сообщения.

Ответ: во втором сообщении информации больше, чем в первом.

№ 6

Информационное сообщение объемом 4 Кбайта содержит 4096 символов. Сколько символов содержит алфавит, при помощи которого было записано это сообщение?

Дано: К = 4096,Iт = 4 Кб.

Найти: N — ?

Решение: 1. N = 2I, неизвестно I;

2. Iт = K*I, I = Iт/К = 41024-8/4096 = 8 бит — объем одного символа; N = 28 = 256 символов — мощность алфавита.

Ответ: алфавит содержит 256 символов.

№ 7

Сколько килобайтов составляет сообщение из 512 символов 16-символь-ного алфавита?

Дано: N=16, К = 500.

Найти: 1т – ?

Решение: 1. 1т = I*K, неизвестно I;

2. I = log2N = log216 = 4 бита — объем одного символа;

3. 1т = 4*512 = 2048 бит — объем всего сообщения;

4. 2048-8/1024 =16 Кбайт.

Ответ: 16 Кбайт объем всего сообщения.

№ 8

Сколько символов содержит сообщение, записанное с помощью 256-символьного алфавита, если объем его составил 1/32 часть Мбайта?

Дано: N = 256, Iт = 1/32 Мб.

Найти: К — ?

Решение: 1. Выразим Iт = 1/32 Мб в битах: 1/25 Мб = 1/25*220*23 = 218 бит;

2. Iт = I*К, К = Iт/I, неизвестно I;

3. I = log2N = log2256 = 8 бит – объем одного символа;

4. К = 218/8 = 218/23 = 215 = 32768 символов.

Ответ: в сообщении 32768 символов.

№ 9

Объем сообщения, содержащего 2048 символов, составил 1/512 часть байта. Каков размер алфавита, с помощью которого записано сообщение?

Дано: К = 2048,1т = 1/512 Мбайта.

Найти: N — ?

Решение: 1. Выразим Iт = 1/512 Мбайта в битах: 1/29М6 = 1/29*220*23 = 214 бит;

2. N = 21, неизвестно I;

3. Iт = К*I, I = Iт/К = 214/2048 = 214/211 = 23 = 8 бит — объем одного символа; 4. N = 28 = 256 символов — мощность алфавита.

Ответ: размер алфавита равен 256 символов.

№ 10

Для записи текста использовался 256-символьный алфавит. Каждая страница содержит 30 строк по 70 символов в строке. Какой объем информации содержат 5 страниц текста?

Дано: N = 256, х = 30 — количество строк, у = 70 — количество символов в строке, М = 5 — количество страниц.

Найти: Iт – ?

Решение: 1. I = log2N = log2256 = 8 бит = 1 байт — объем одного символа;

2. К = х*у*М = 30*70*5 = 10500 символов — в тексте;

3. Iт = I*K = 1*10500 = 10500 байт = 10 Кбайт — объем всего текста.

Ответ: объем всего текста 10 Кбайт

Домашнее задание

1. Мощность алфавита равна 8 символам. В сообщении 20 символов. Какой его информационный объем?

2. Информационный объем сообщения равен 4096 бит. Оно содержит 1024 символа. Какова мощность алфавита, с помощью которого составлено это сообщение?

3. Сколько килобайтов составляет сообщение, содержащее 12288 битов?

4. Как найти информационный объем какой-нибудь книги? Опишите решение по действиям.

Уровень понимания:

1. Какова мощность алфавита, с помощью которого записано сообщение, содержащее 4096 символов, если его объем составляет 1,5 Кбайт.

2. Сколько символов содержит сообщение, записанное с помощью 16-символьного алфавита, если его объем составляет 1/64 часть Мбайта.

3. Сообщение занимает 4 страницы по 30 строк. В каждой строке по 50 символов. Все сообщение содержит информации в 4500 байт. Какова мощность используемого алфавита?

2. Дискретная форма представления информации

1. Единицы измерения количества информации.

  1. Сколько бит составляет сообщение, содержащее 0,25 кБ?

  1. Сколько кБайт составляет сообщение, содержащее 9192 бит?

  1. Сколько байтов информации содержится в сообщении размером четверть мегабайта?

  1. Сколько бит информации содержит сообщение объемом половина килобайта?

  1. Сколько Мбайт содержится в 216 Байтах?

2. Дискретная форма представления информации.

1. В кодировке КОИ-8 каждый символ кодируется одним байтом. Определите количество символов в сообщении, если информационный объем сообщения в этой кодировке равен 320 бит.

2. В кодировке MAC каждый символ кодируется одним байтом. Определите количество символов в сообщении, если информационный объем сообщения в этой кодировке равен 560 бит.

3. В кодировке CP-1251 каждый символ кодируется одним байтом. Определите количество символов в сообщении, если информационный объем сообщения в этой кодировке равен 160 бит.

4. Информационное сообщение объемом 1,5 Кбайта содержит 3072 символа. Каким количеством бит кодируется каждый символ этого сообщения?

5. Информационный объем сообщения, содержащего 2048 символов, составляет 2 Кбайта. Каким количеством бит кодируется каждый символ этого сообщения?

6. Сообщение из 50 символов записано в 16-битной кодировке Unicode. Определите информационный объем этого сообщения.

7. Сообщение из 20 символов записано в 8-битной кодировке КОИ-8. Определите информационный объем этого сообщения.

8. Информационное сообщение объемом 0,5 Кбайта содержит 256 символов. Каким количеством бит кодируется каждый символ этого сообщения?

9. Информационный объем сообщения из 120 символов составляет 960 бит. Сколько бит используется для кодировки каждого символа данного сообщения?

10. В кодировке Unicode каждый символ кодируется двумя байтами. Определите информационный объем сообщения в этой кодировке: В 1 килобайте 1024 байт.

11. В кодировке КОИ-8 каждый символ кодируется одним байтом. Определите информационный объем следующего сообщения в этой кодировке: Вода и землю, и камень точит.

  1. В одном из вариантов кодировки Unicode каждый символ кодируется 16 битами. Определите информационный объем сообщения в этой кодировке: Антология глупых мыслей – уже мудрость.

13. В одном из вариантов кодировки Unicode каждый символ кодируется

16 битами. Определите информационный объём сообщения из 512 символов

в этой кодировке.

1) 512 байт 2) 1024 бит 3) 512 бит 4) 1 Кбайт

14. В одном из вариантов кодировки Unicode каждый символ кодируется двумя

байтами. Определите количество символов в сообщении, если

информационный объём сообщения в этой кодировке равен 480 бит.

  1. 60 2) 40 3) 240 4) 30

3. Алфавитный подход к измерению информации

1. Рассказ, набранный на компьютере, содержит 4 страницы, на каждой

странице 48 строк, в каждой строке 64 символа. Определите информационный объём рассказа в кодировке КОИ-8, в которой каждый символ кодируется 8 битами.

1) 12 Кбайт 2) 12000 байт

3) 20 Кбайт 4) 24 Кбайт

2. Рассказ, набранный на компьютере, содержит 2 страницы, на каждой странице 32 строки, в каждой строке 64 символа. Определите информационный объём рассказа в кодировке Unicode, в которой каждый символ кодируется 16 битами.

1) 16000 бит 2) 8000 байт

3) 8 Кбайт 4) 4 Кбайта

  1. Сообщение, записанное буквами 128-символьного алфавита, содержит 80 символов. Какой объем информации оно несет?

  1. Информационное сообщение объемом 14 кБ содержит 16384 символа. Сколько символов содержит алфавит, при помощи которого записано это сообщение?

  1. Для записи текста использовался 16-символьный алфавит. Каждая страница содержит 32 строки по 128 символов в каждой строке. Какой объем информации содержит 8 страниц текста?

  1. Сообщение занимает 4 страницы по 30 строк. В каждой строке записано по 70 символов. Сколько символов в алфавите, если все все сообщение содержит 3150 Байтов?

  1. Информационное сообщение объемом 1,5 кБ содержит 3072 символа. Сколько символов содержит алфавит, при помощи которого записано это сообщение?

  1. Для записи текста использовался 32-символьный алфавит. Каждая страница содержит 40 строки по 52 символа в каждой строке. Какой объем информации содержит 7 страниц текста?

9. Сообщение, записанное буквами 16-символьного алфавита, содержит 75 символов. Какой объем информации оно несет?

10*. Два текста содержат одинаковое количество символов. Количество информации в первом тексте в 1,2 раза больше, чем во втором. Сколько символов содержат алфавиты, с помощью которых записаны сообщения, если известно, что размер каждого алфавита не превышает 100 символов, и каждый символ кодируется целым числом битов.

  1. Приветствие участникам соревнований от марсиан записано с помощью всех символов марсианского алфавита: ТЕВИРП!КИ!

Сколько информации оно несет?

  1. Объем сообщения, содержащего 2048 символов, составил 1/512 часть Мбайта. Сколько символов содержит алфавит, при помощи которого оно записано?

  1. Один символ марсианского алфавита весит 4 бита. Какова мощность марсианского алфавита?

14*. Два текста содержат одинаковое количество символов. Количество информации в первом тексте в 1,5 раза больше, чем во втором. Сколько символов содержат алфавиты, с помощью которых записаны сообщения, если известно, что размер каждого алфавита не превышает 10 символов, и каждый символ кодируется целым числом битов.

  1. Сообщение, записанное на языке племени Мульти содержит 64 символа, что составляет 1/32 часть килобайта. Сколько символов содержит алфавит племени Мульти.

  1. Книга состоит из 64 страниц. На каждой странице 256 символов. Какой объем информации (в кБ) содержится в книге, если используемый алфавит состоит из 32 символов?

17*. Два текста содержат одинаковое количество символов. Количество информации в первом тексте в 2,5 раза меньше, чем во втором. Сколько символов содержат алфавиты, с помощью которых записаны сообщения, если известно, что размер каждого алфавита не превышает 32 символов, и каждый символ кодируется целым числом битов.

  1. Объем сообщения, записанного с помощью 256-символьного алфавита, составил 1/512 часть Мбайта. Сколько символов содержит сообщение?

4. Логические значения, операции, выражения.

1. Приведите пример имени, для которого высказывание Первая буква гласная И Последняя буква согласная будет ложно.

2. Приведите пример страны, для которой высказывание Первая буква согласная И Третья буква согласная И Последняя буква гласная истинно будет истинно.

3. Приведите пример имени, для которого высказывание Первая буква гласная И Последняя буква согласная будет истинно.

4. Приведите пример животного, для которого высказывание (Последняя буква гласная ИЛИ Вторая буква согласная) И Четвертая буква гласная будет ложно.

5. Приведите пример имени, для которого высказывание Вторая буква согласная ИЛИ Последняя буква согласная будет ложно.

6. Приведите пример страны, для которой высказывание Первая буква согласная ИЛИ Вторая буква гласная ИЛИ Последняя буква гласная будет ложно.

7. Приведите пример животного, для которого высказывание (Последняя буква гласная ИЛИ Вторая буква согласная) И Четвертая буква гласная будет истинно.

8. Приведите пример страны, для которой высказывание Первая буква гласная ИЛИ Вторая буква согласная ИЛИ Последняя буква гласная будет ложно.

9. Приведите пример животного, для которого высказывание (Первая буква согласная И Вторая буква гласная) ИЛИ Третья буква согласная будет ложно.

10. Приведите пример имени, для которого высказывание Вторая буква согласная ИЛИ Последняя буква согласная будет истинно.

11. Для какого из приведённых имён истинно высказывание:

НЕ(Первая буква гласная) И (Последняя буква гласная)?

  1. Николай 2) Юрий 3) Марина 4) Иван

12. Для какого из приведённых имён ЛОЖНО высказывание:

(Первая буква гласная) ИЛИ НЕ (Последняя буква гласная)?

  1. Елена 2) Марина 3) Федор 4) Иван

13. Для какого из указанных значений числа X истинно выражение

НЕ((X > 3) ИЛИ (X ) И (X > 2)?

  1. 1 2) 2 3) 3 4) 4

14. Для какого из указанных значений числа X ложно

выражение

(X > 3) ИЛИ НЕ((X И (X > 2))?

                  1. 1 2) 2 3) 3 4) 4

15. Для какого из указанных значений числа X ложно выражение

НЕ(X > 2) ИЛИ (X И (X > 1)?

  1. 1 2) 2 3) 3 4) 4

5. Передача информации через соединение.

1. Скорость передачи данных через ADSL-соединение равна 256000 бит/c.

Какова длительность передачи файла через данное соединение (в секундах),

если размер файла 500 Кбайт?

2. Скорость передачи данных через ADSL-соединение равна 128000 бит/c.

Какова длительность передачи файла через данное соединение (в секундах),

если размер файла 250 Кбайт?

3. Скорость передачи данных через ADSL-соединение равна 512000 бит/c.

Передача файла через данное соединение заняла 8 секунд. Определите

размер файла в Кбайтах.

4. Скорость передачи данных через ADSL-соединение равна 128000 бит/c.

Передача файла через данное соединение заняла 32 секунды. Определите

размер файла в Кбайтах.

5. Файл размером 4 Кбайта передаётся через некоторое соединение со

скоростью 2048 бит в секунду. Определите размер файла (в байтах),

который можно передать за то же время через другое соединение со

скоростью 512 бит в секунду.

6. Файл размером 3 Кбайт передаётся через некоторое соединение

600 секунд. Сколько секунд будет передаваться файл размером 256 байт

через это же соединение?

7. Скорость передачи данных составляет 56000 бит/с. Необходимо передать файл размером 280000 байт. Определите время передачи файла в секундах.

8. Файл размером 4 Кбайта передаётся через некоторое соединение со

скоростью 2048 бит в секунду. Определите размер файла (в байтах),

который можно передать за то же время через другое соединение со

скоростью 512 бит в секунду.

Определение количества информации. Решение задач

Решение задач
тема: определение количества информации
Пример решения
Определить количество информации,
которое несет буква русского алфавита
Решение:
Мощность русского алфавита без буквы
5
i
i
N=32 N =32
32 2 2 2
i =5 бит
Задачи для самостоятельного решения:
1. Определить количество информации,
которое несет буква алфавита, состоящего
из 64 символов
2. Объем сообщения – 7,5 кбайт. Известно, что
данное сообщение содержит 7680 символов.
Какова мощность алфавита?
1) 77
2) 256
3) 156
4) 512
3. Мощность алфавита равна 256. Сколько
Кбайт памяти потребуется для сохранения 160
страниц текста, содержащего в среднем 192
символа на каждой странице?
1) 10 2) 20
3) 30
4) 40
4. Сообщение, записанное буквами из 64
символьного алфавита, содержит 20 символов.
Какой объем информации оно несет?
Подсказка
K=20, найти i и вычислить С.
5.
Сообщение записано с помощью алфавита,
содержащего 8 символов. Какое количество информации
несет одна буква этого алфавита?
6. Сообщение , записанное буквами из 128символьного алфавита, содержит 30 символов.
Какой объем информации оно несет?
7. Одно племя имеет 32-символьный алфавит, а
второе племя – 64-символьный алфавит.
Вожди племен обменялись письмами. Письмо
первого племени содержало 80 символов, а
письмо второго племени – 70 символов.
Сравните объем информации, содержащийся
в письмах.
8. Для записи сообщения использовался 64
символьный алфавит. Каждая страница
содержит 30 строк. Все сообщение содержит
8775 байт информации и занимает 6 страниц.
Сколько символов в строке?
9. В велокроссе участвуют 119 спортсменов.
Специальное устройство регистрирует прохождение
каждым из участников промежуточного финиша,
записывая его номер с использованием минимально
возможного количества бит, одинакового для
каждого спортсмена. Каков информационный объем
сообщения, записанного устройством, после того как
промежуточный финиш прошли 70 велосипедистов?
10. В зоопарке 32 обезьяны живут в двух
вольерах, А и Б. Одна из обезьян – альбинос
(вся белая). Сообщение «Обезьяна-альбинос
живет в вольере А» содержит 4 бита
информации. Сколько обезьян живут в
вольере Б?
11. Объем сообщения, содержащего 2048 символов,
составил 1/512 часть Мбайта. Каков размер алфавита, с
помощью которого записано сообщение?
12. Сколько символов составляет сообщение, записанное с
помощью 16-ти символьного алфавита, если объем его
составил 1/16 часть Мбайта?
13. Сообщение занимает 3 страницы по 25 строк. В
каждой строке записано по 60 символов. Сколько
символов в этом алфавите, если все сообщение
содержит 1125 байт?
14. Пользователь компьютера, хорошо владеющий навыками ввода
информации с клавиатуры, может вводить в минуту 100 знаков.
Мощность алфавита, используемого в компьютере, равна 256.
Какое количество информации в байтах может ввести пользователь
за 1 минуту.
15.
Скорость чтения ученика 10 класса составляет приблизительно
250 символов в минуту. Приняв мощность используемого алфавита
за 64, определите, какой объем информации в килобайтах получит
ученик, если он будет непрерывно читать в течение 40 минут.
16.
Объем сообщения, содержащего 2048 символов, составил
1/512 часть Мбайта. Каков размер алфавита, с помощью которого
записано сообщение?

Сборник

лабораторно-практических работ

по дисциплине «Информатика»

для студентов специальности 040700.62

«Организация работы с молодежью»

1 семестр

Практическая работа №1.

Решение задач на кодирование. Системы счисления.

Решите задачи:

1.

  1. Алфавит содержит 32 буквы. Какое количество информации несет одна буква?

  1. Сообщение, записанное буквами из 16 символьного алфавита, содержит 10 символов. Какой объем информации в битах оно несет?

  1. Информационное сообщение объемом 300 бит содержит 100 символов. Какова мощность алфавита?

  1. Объем сообщения, содержащего 20 символов, составил 100 бит. Каков размер алфавита, с помощью которого записано сообщение?

  1. Сколько символов содержит сообщение, записанное с помощью 8 символьного алфавита, если объем его составил 120 бит?

  1. В книге 100 страниц. На каждой странице 60 строк по 80 символов в строке. Вычислить информационный объем книги.

  1. Есть два текста которые содержат одинаковое количество символов. Один текст записан на русском языке его алфавит (32 символа), а второй на украинском его алфавит (16 символов). Чей текст несет большее количество информации?

  1. Объем сообщения, содержащего 2048 символов, составил 1/512 часть Мбайта. Определить мощность алфавита.

и) Вы подошли к светофору, когда горел желтый свет. После этого загорелся зеленый. Какое количество информации вы при этом получили?

к) Группа школьников пришла в бассейн, в котором4 дорожки для плавания. Тренер сообщил, что группа будет плавать на дорожке номер 3. Сколько информации получили школьники из этого сообщения?

л) Сообщение о том, что ваш друг живет на 10 этаже, несет 4 бита информации. Сколько этажей дома?

2.

а) Подсчитать, сколько места будет занимать одна минута цифрового звука на жестком диске или любом другом цифровом носителе, записанного с частотой

1) 44.1 кГц;

2) 11 кГц;

3) 22 кГц;

4) 32 кГц;

и разрядностью 16 бит.

б)  Какой объем данных имеет моноаудиофайл, длительность звучания которого 1 секунда, при среднем качестве звука (16 бит, 24 кГц)?

в) Рассчитайте объем стереоаудиофайла длительностью 20 секунд при 20-битном кодировании и частоте дискредитации 44.1 кГц.

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

д)  Растровый файл, содержащий черно-белый (без оттенков серого) квадратный рисунок, имеет объем 200 байт. Рассчитайте размер стороны квадрата (в пикселях).

е) Объем изображения, размером 40х50 пикселей, составляет 2000 байт. Изображение использует: ? цветов

ж) Видеопамять компьютера имеет объем 512Кб, размер графической сетки 640х200, в палитре 16 цветов. Какое количество страниц экрана может одновременно разместиться в видеопамяти компьютера?

Выполните:

1.

а) Какая запись числа 729,854 в десятичной системе счисления будет верной?

1) 7х103 + 2х102 + 9х101 + 8х100 + 5х10-1 + 4х10-2; 2) 7х102 + 2х101 + 9х100+ 8х10-1 + 5х10-2 + 4х10-3; 3) 7х103 + 2х102 + 9х101 + 8х10-1 + 5х10-2 + 4х10-3; 4) 7х102 + 2х101 + 9х100 + 8х10-0 + 5х10-1 + 4х10-2.

б) Переведите число 7510 в шестнадцатеричную систему счисления.

в) Переведите число 1F316 в десятичную систему счисления.

г) Переведите число 1011,12 в десятичную систему счисления.

д) Переведите восьмеричное число 0,1 в десятичную систему счисления.

е) Переведите десятичное число 0,36 в шестнадцатеричную систему счисления

ж) Переведите число А9,В8 в двоичную систему счисления

з) Вычислите 00000011+11110101= ? 11110101 — 00000011= ?

и) Переведите двоичное число 110100101 в десятичную систему счисления.

к) Переведите десятичное число 999,35 в двоичную систему счисления.

л) Переведите шестнадцатеричное число 92С8 в восьмеричную систему счисления.

м) Перевести в восьмеричную систему счисления следующее целое число 11112:

н) Перевести в шестнадцатеричную систему счисления следующее целое число 10101012:

о) Числа имеют вид 1215 и 1112. Тогда их сумма в десятичной системе счисления равна…

п) Перевести число 12510 в двоичную систему счисления.

11 класс Определение количества информации, представленной с помощью знаковой системы. Задачи.


Множество символов, используемых для записи текста, называется алфавитом. Мощность (размер) – полное количество символов в алфавите. Если допустить, что все симолы алфавита встречаются в тексте с одинаковой частотой (равновероятно), то количество информации, которое несет каждый символ, вычисляется по формуле: i=log2N, где N –мощность алфавита.

Если весь текст состоит из К символов, то при алфавитном подходе размер содержащейся в нем информации равен I=K*i, где i –информационный вес одного символа.


Алфавит племени Мульти состоит из 8 букв. Какое количество информации несет одна буква этого алфавита? Сообщение, записанное буквами из 64-х символьного алфавита, содержит 20 символов. Какой объем информации оно несет? Племя Мульти имеет 32-х символьный алфавит. Племя Пульти использует 64-х символьный алфавит. Вожди племен обменялись письмами. Письмо племени Мульти содержало 80 символов, а письмо племени Пульти — 70 символов. Сравните объемы информации, содержащейся в письмах. Информационное сообщение объемом 1,5 Кбайта содержит 3072 символа. Сколько символов содержит алфавит, при помощи которого было записано это сообщение? Объем сообщения, содержащего 2048 символов, составил 1/512 часть Мбайта. Каков размер алфавита, с помощью которого записано сообщение? Сколько символов содержит сообщение, записанное с помощью 16-ти символьного алфавита, если объем его составил 1/16 часть Мбайта? Сколько килобайтов составляет сообщение, содержащее 12288 битов? Сколько килобайтов составит сообщение из 384 символов 16-ти символьного алфавита? Для записи текста использовался 256-символьный алфавит. Каждая страница содержит 30 строк по 70 символов в строке. Какой объем информации содержат 5 страниц текста? Сообщение занимает 3 страницы по 25 строк. В каждой строке записано по 60 символов. Сколько символов в использованном алфавите, если все сообщение содержит 1125 байтов? Для записи сообщения использовался 64-х символьный алфавит. Каждая страница содержит 30 строк. Все сообщение содержит 8775 байтов информации и занимает 6 страниц. Сколько символов в строке? Сообщение занимает 2 страницы и содержит 1/16 Кбайта информации. На каждой станице записано 256 символов. Какова мощность использованного алфавита? Два сообщения содержат одинаковое количество символов. Количество информации в первом тексте в 1,5 раза больше, чем во втором. Сколько символов содержат алфавиты, с помощью которых записаны сообщения, если известно, что число символов в каждом алфавите не превышает 10 и на каждый символ приходится целое число битов? Два сообщения содержат одинаковое количество информации. Количество символов в первом тексте в 2,5 раза меньше, чем во втором. Сколько символов содержат алфавиты, с помощью которых записаны сообщения, если известно, что размер каждого алфавита не превышает 32 символов и на каждый символ приходится целое число битов? ДНК человека (генетический код) можно представить себе как некоторое слово в четырехбуквенном алфавите, где каждой буквой помечается звено цепи ДНК, или нуклеотид. Сколько информации (в битах) содержит ДНК человека, содержащий примерно 1,5 х1023 нуклеотидов? Выяснить, сколько бит информации несет каждое двузначное число (отвлекаясь от его конкретного числового значения). Какова мощность алфавита, с помощью которого записано сообщение, содержащее 2048 символов, если его объем составляет 1/512 часть одного мегабайта? Пользователь компьютера, хорошо владеющий навыками ввода информации с клавиатуры, может вводить в минуту 100 знаков. Мощность алфавита, используемого в компьютере, равна 256. Какое количество информации в байтах может ввести пользователь в компьютер за 1 минуту? Система оптического распознавания символов позволяет преобразовывать отсканированные изображения страниц документа в текстовый формат со скоростью 4 страницы в минуту и использует алфавит мощностью 65536 символов. Какое количество информации будет нести текстовый документ после 5 минут работы приложения, страницы которого содержат 40 строк по 50 символов?

Ограничения на количество символов в текстовых сообщениях TransactionTree и методы конкатенации

Максимальное количество символов в одном сообщении, отправляемом операторам связи, зависит от используемой кодировки, а используемая кодировка зависит от содержимого сообщения. HTTP API ограничивает длину SMS-сообщений до 2048 символов.

  • Сообщение, содержащее только текстовые символы, будет закодировано с использованием GSM-7
  • Сообщение, содержащее смайлы, будет закодировано с использованием UCS-2

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

Как TransactionTree отправляет сцепленные (длинные) сообщения?

В зависимости от содержимого сообщения (простой текст, эмодзи, специальные символы и т. Д.) TransactionTree будет использовать кодировку GSM-7 или UCS-2 для отправки сообщений, и каждая кодировка имеет ограничения на количество символов, которые могут быть отправлены. Ограничения для одного сегмента:

  • 160 символов для GSM-7 (например, Latin-1/9 и GSM8)
  • 70 символов для UCS-2 (например, сообщение с смайликами)

Когда вы отправляете сообщение, длина которого превышает максимальное количество символов на сегмент, TransactionTree автоматически разделит сообщение за вас, добавит специальный заголовок (User Data Header) и отправит несколько SMS-сообщений операторам связи.

Что такое заголовок пользовательских данных?

Заголовок пользовательских данных (UDH) занимает 6 байтов и указывает принимающему устройству, как заново собрать сегменты, чтобы все ваше сообщение отображалось как одно SMS на принимающей трубке. Максимальное количество символов в составном (длинном) сообщении немного уменьшено из-за включения конкатенационных заголовков (UDH).

Вы можете объяснить математику?

Да! Вот несколько важных единиц для начала:

  • SMS-сообщения отправляются 140 байтами
  • 1 байт = 8 бит
  • В кодировке GSM, 1 символ = 7 бит
  • В Юникоде 1 символ = 16 бит
  • UDH = 6 байтов

А теперь давайте сделаем некоторые вычисления.

TransactionTree и отрасль в целом считает сообщения по сегментам; Таким образом, с клиентов будет взиматься плата за каждый отдельный сегмент сообщения, отправляемого нижестоящим операторам связи.

Например:

Ограничения службы

Azure Monitor — Azure Monitor

  • 8 минут на чтение

В этой статье

В этой статье перечислены ограничения в различных областях Azure Monitor.

Предупреждения

Ресурс Предел по умолчанию Максимальный лимит
Метрические оповещения (классические) 100 активных правил предупреждений на подписку. Позвонить в службу поддержки
Метрические предупреждения 5000 активных правил предупреждений на одну подписку в общедоступных облаках Azure, Azure China 21Vianet и Azure для государственных организаций. Если вы достигли этого предела, узнайте, можете ли вы использовать оповещения о нескольких ресурсах того же типа.
5000 метрических временных рядов на одно правило оповещения.
Позвоните в службу поддержки.
Оповещения журнала активности 100 активных правил предупреждений на подписку (не может быть увеличено). То же, что по умолчанию
Журнал предупреждений 512 активных правил предупреждений на подписку. 200 активных правил предупреждений на ресурс. Позвонить в службу поддержки
Правила предупреждений и длина описания правил действий Предупреждения поиска в журнале 4096 символов
Все остальные 2048 символов
То же, что по умолчанию

Группы действий

Ресурс Предел по умолчанию Максимальный лимит
Отправка приложения Azure 10 действий приложения Azure на группу действий. То же, что по умолчанию
Электронная почта 1000 действий по электронной почте в группе действий.
Не более 100 писем в час.
См. Также информацию об ограничении скорости.
То же, что по умолчанию
ITSM 10 ITSM-действий в группе действий. То же, что по умолчанию
Логическое приложение 10 действий приложения логики в группе действий. То же, что по умолчанию
Runbook 10 действий модуля Runbook в группе действий. То же, что по умолчанию
SMS 10 SMS-действий в группе действий.
Не более 1 SMS-сообщения каждые 5 минут.
См. Также информацию об ограничении скорости.
То же, что по умолчанию
Голос 10 голосовых действий в группе действий.
Не более 1 голосового вызова каждые 5 минут.
См. Также информацию об ограничении скорости.
То же, что по умолчанию
Вебхук 10 действий веб-перехватчика в группе действий.Максимальное количество вызовов веб-перехватчика — 1500 в минуту на одну подписку. Другие ограничения доступны в информации о конкретных действиях. То же, что по умолчанию

Автомасштабирование

Ресурс Предел по умолчанию Максимальный лимит
Настройки автомасштабирования 100 на регион на одну подписку. То же, что по умолчанию
Профили автомасштабирования 20 профилей на настройку автомасштабирования. То же, что по умолчанию

Правила сбора данных

Предел Значение
Максимальное количество источников данных 10
Максимальное количество спецификаторов счетчика в счетчике производительности 100
Максимальное количество названий объектов в системном журнале 20
Максимальное количество запросов XPath в журнале событий 100
Максимальное количество потоков данных 10
Максимальное количество потоков данных 10
Максимальное количество добавочных номеров 10
Максимальный размер настроек расширения 32 Кб
Максимальное количество рабочих областей Log Analytics 10

Журнал запросов и язык

Общие ограничения запросов

Предел Описание
Язык запроса Azure Monitor использует тот же язык запросов Kusto, что и обозреватель данных Azure.См. Раздел о различиях языка запросов журнала Azure Monitor для элементов языка KQL, не поддерживаемых в Azure Monitor.
Лазурные регионы Запросы журнала могут испытывать чрезмерные накладные расходы, когда данные охватывают рабочие области Log Analytics в нескольких регионах Azure. См. Подробности в разделе «Ограничения запросов».
Запросы между ресурсами Максимальное количество ресурсов Application Insights и рабочих областей Log Analytics в одном запросе ограничено 100.
Межресурсный запрос не поддерживается в View Designer.
Межресурсный запрос в предупреждениях журнала поддерживается в новом API scheduleQueryRules.
См. Подробности в разделе «Ограничения запросов между ресурсами».

Регулирование запросов пользователей

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

Измерение Лимит на пользователя Описание
Параллельные запросы 5 Если для пользователя уже выполняется 5 запросов, любые новые запросы помещаются в очередь параллелизма для каждого пользователя. Когда один из запущенных запросов заканчивается, следующий запрос будет извлечен из очереди и запущен.Сюда не входят запросы из правил предупреждений.
Время в очереди параллелизма 3 минуты Если запрос находится в очереди более 3 минут без запуска, он будет завершен ответом об ошибке HTTP с кодом 429.
Всего запросов в очереди параллелизма 200 Когда количество запросов в очереди достигнет 200, любые дополнительные запросы будут отклоняться с кодом ошибки HTTP 429. Это число добавляется к 5 запросам, которые могут выполняться одновременно.
Частота запросов 200 запросов за 30 секунд Это общая скорость отправки запросов одним пользователем во все рабочие области. Это ограничение применяется к программным запросам или запросам, инициированным частями визуализации, такими как панели мониторинга Azure и сводная страница рабочей области Log Analytics.
  • Оптимизируйте запросы, как описано в разделе Оптимизация запросов журнала в Azure Monitor.
  • Панели мониторинга и книги
  • могут содержать несколько запросов в одном представлении, которые генерируют пакет запросов при каждой загрузке или обновлении.Подумайте о том, чтобы разбить их на несколько представлений, которые загружаются по запросу.
  • В Power BI рассмотрите возможность извлечения только агрегированных результатов, а не необработанных журналов.

Рабочие области Log Analytics

Объем и хранение данных

Уровень Лимит в сутки Хранение данных Комментарий
Текущий ценовой уровень за ГБ
(введен в апреле 2018 г.)
Без ограничений 30-730 дней Хранение данных сверх 31 дня возможно за дополнительную плату.Узнайте больше о ценах на Azure Monitor.
Устаревшие бесплатные уровни
(введены в апреле 2016 г.)
500 МБ 7 дней Когда ваша рабочая область достигает предела в 500 МБ в день, прием данных прекращается и возобновляется в начале следующего дня. День основан на UTC. Обратите внимание, что данные, собранные Центром безопасности Azure, не включены в это ограничение в 500 МБ в день и будут продолжать собираться сверх этого лимита.
Устаревшая автономная версия на уровне ГБ
(введена в апреле 2016 г.)
Без ограничений от 30 до 730 дней Хранение данных сверх 31 дня возможно за дополнительную плату.Узнайте больше о ценах на Azure Monitor.
Legacy Per Node (OMS)
(введено в апреле 2016 г.)
Без ограничений от 30 до 730 дней Хранение данных сверх 31 дня возможно за дополнительную плату. Узнайте больше о ценах на Azure Monitor.
Устаревший стандарт уровня Без ограничений 30 дней Удержание не регулируется
Legacy Premium уровня Без ограничений 365 дней Удержание не регулируется

Количество рабочих мест на подписку.

Ценовой уровень Ограничение рабочего пространства Комментарии
Уровень бесплатного пользования 10 Этот предел не может быть увеличен.
Все остальные уровни Без ограничений Вы ограничены количеством ресурсов в группе ресурсов и количеством групп ресурсов на подписку.

Портал Azure

Категория Лимит Комментарии
Максимальное количество записей, возвращаемых запросом журнала 10 000 Уменьшите результаты, используя область запроса, временной диапазон и фильтры в запросе.

API сборщика данных

Категория Лимит Комментарии
Максимальный размер одного поста 30 МБ Разделите большие тома на несколько постов.
Максимальный размер значений поля 32 КБ Поля длиннее 32 КБ усекаются.

Поиск по API

Категория Лимит Комментарии
Максимальное количество записей, возвращаемых в одном запросе 500 000
Максимальный размер возвращаемых данных 64000000 байт (~ 61 МиБ)
Максимальное время выполнения запроса 10 минут Подробнее см. Таймауты.
Максимальная частота запросов 200 запросов в 30 секунд на пользователя или IP-адрес клиента Azure AD Подробнее см. Пределы скорости.

Соединитель журналов Azure Monitor

Категория Лимит Комментарии
Максимальное количество записей 500 000
Максимальное время ожидания запроса 110 секунд
Графики Визуализация в журналах и коннектор используют разные библиотеки диаграмм, и некоторые функции в коннекторе в настоящее время недоступны.

Общие ограничения рабочего пространства

Категория Лимит Комментарии
Максимальное количество столбцов в таблице 500
Максимальное количество символов для имени столбца 500

Объем приема данных

Azure Monitor — это крупномасштабная служба данных, которая обслуживает тысячи клиентов, отправляя терабайты данных каждый месяц с растущими темпами.Предел объема объема предназначен для изоляции клиентов Azure Monitor от внезапных всплесков приема в многопользовательской среде. Пороговое значение объема приема по умолчанию, равное 500 МБ (сжатый), определено в рабочих областях, это преобразуется примерно в 6 ГБ / мин без сжатия — фактический размер может варьироваться между типами данных в зависимости от длины журнала и степени его сжатия. Ограничение объема применяется к данным, полученным из ресурсов Azure с помощью параметров диагностики. При достижении предела объема, механизм повтора пытается принять данные 4 раза в течение 30 минут и отбросить их, если операция завершится неудачно.Это не относится к данным, полученным от агентов или API сборщика данных.

Когда объем данных, отправляемых в ваше рабочее пространство, превышает 80% порогового значения, настроенного в вашем рабочем пространстве, событие отправляется в таблицу Operation в вашем рабочем пространстве каждые 6 часов, пока пороговое значение продолжает превышаться. Когда объем полученного объема превышает пороговое значение, некоторые данные удаляются, и событие отправляется в таблицу Operation в вашей рабочей области каждые 6 часов, пока пороговое значение продолжает превышаться.Если ваш объем приема данных продолжает превышать пороговое значение или вы ожидаете его достичь в ближайшее время, вы можете запросить его увеличение, открыв запрос в службу поддержки.

См. Раздел Мониторинг работоспособности рабочей области Log Analytics в Azure Monitor, чтобы создать правила предупреждений для упреждающего уведомления при достижении любых ограничений приема.

Application Insights

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

Ресурс Лимит Примечание
Всего данных в день 100 ГБ Вы можете уменьшить объем данных, установив ограничение. Если вам нужно больше данных, вы можете увеличить лимит на портале до 1000 ГБ. Если емкость превышает 1000 ГБ, отправьте электронное письмо по адресу [email protected].
Дросселирование 32000 событий в секунду Предел измеряется за минуту.
Сохранение данных 30-730 дней Этот ресурс предназначен для поиска, аналитики и обозревателя показателей.
Доступность многоступенчатого теста, сохранение подробных результатов 90 дней Этот ресурс предоставляет подробные результаты каждого шага.
Максимальный размер события 64000 байт
Свойство и длина названия метрики 150 См. Схемы типов.
Длина строки значения свойства 8,192 См. Схемы типов.
Длина сообщения трассировки и исключения 32 768 См. Схемы типов.
Количество тестов доступности для каждого приложения 100
Сохранение данных профилировщика 5 дней
Данные профилировщика отправляются в день 10 ГБ

Дополнительные сведения см. В разделе «О ценах и квотах в Application Insights».

Следующие шаги

Безболезненное руководство — Настоящий Python

Обработка кодировок символов в Python или любом другом языке временами может показаться болезненной.В таких местах, как Stack Overflow, есть тысячи вопросов, возникающих из-за путаницы с исключениями, такими как UnicodeDecodeError и UnicodeEncodeError . Это руководство предназначено для устранения тумана Exception и демонстрации того, что работа с текстовыми и двоичными данными в Python 3 может быть удобной. Поддержка Unicode в Python сильна и надежна, но для ее освоения требуется время.

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

К концу этого руководства вы получите:

  • Получите концептуальные обзоры кодировок символов и систем нумерации
  • Узнайте, как кодирование вступает в игру с помощью Python str и байт
  • Знать о поддержке в Python систем нумерации с помощью различных форм int литералов
  • Ознакомиться со встроенными функциями Python, связанными с кодировками символов и системами нумерации.

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

Примечание : эта статья ориентирована на Python 3. В частности, все примеры кода в этом руководстве были сгенерированы из оболочки CPython 3.7.2, хотя все второстепенные версии Python 3 должны вести себя (в основном) одинаково при обработке текста.

Если вы все еще используете Python 2 и вас пугают различия в том, как Python 2 и Python 3 обрабатывают текстовые и двоичные данные, то, надеюсь, это руководство поможет вам сделать переход.

Что такое кодировка символов?

Существуют десятки, если не сотни кодировок символов.Лучший способ понять, что это такое, — рассмотреть одну из простейших кодировок символов — ASCII.

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

Включает:

  • Строчные английские буквы : a от до z
  • Заглавные английские буквы : A от до Z
  • Некоторые знаки препинания и символы : "$" и "!" , чтобы назвать пару
  • Пробельные символы : фактический пробел ( "" ), а также новая строка, возврат каретки, горизонтальная табуляция, вертикальная табуляция и некоторые другие
  • Некоторые непечатаемые символы : символы, такие как backspace, "\ b" , которые нельзя напечатать буквально так, как буква A может

Итак, какое более формальное определение кодировки символов?

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

Различные выделенные категории представляют собой группы персонажей. Каждому одиночному символу соответствует код , который можно рассматривать как целое число. В таблице ASCII символы разбиты на разные диапазоны:

Диапазон кодовой точки Класс
от 0 до 31 Управляющие / непечатаемые символы
от 32 до 64 Пунктуация, символы, числа и пробел
65-90 Заглавные буквы английского алфавита
91–96 Дополнительные графемы, например [ и \
97–122 Строчные буквы английского алфавита
123–126 Дополнительные графемы, такие как { и |
127 Управляющий / непечатаемый символ ( DEL )

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

Кодовый пункт Персонаж (Имя) Кодовый пункт Персонаж (Имя)
0 NUL (Нулевой) 64 @
1 SOH (начало заголовка) 65 А
2 STX (начало текста) 66 Б
3 ETX (конец текста) 67 С
4 EOT (конец передачи) 68 Д
5 ENQ (Запрос) 69 E
6 ACK (подтверждение) 70 Ф.
7 BEL (Звонок) 71 г
8 BS (Backspace) 72 H
9 HT (горизонтальная вкладка) 73 I
10 LF (перевод строки) 74 Дж
11 VT (вертикальный выступ) 75 К
12 FF (подача формы) 76 л
13 CR (возврат каретки) 77 М
14 SO (сдвиг) 78 N
15 SI (сдвиг внутрь) 79 О
16 DLE (выход из канала передачи данных) 80 п
17 DC1 (Управление устройством 1) 81 К
18 DC2 (Управление устройством 2) 82 R
19 DC3 (Управление устройством 3) 83 S
20 DC4 (Контроль устройств 4) 84 т
21 NAK (отрицательное подтверждение) 85 U
22 SYN (синхронный холостой ход) 86 В
23 ETB (конец блока передачи) 87 Вт
24 CAN (Отмена) 88 X
25 EM (конец среды) 89 Y
26 SUB (Заменитель) 90 Z
27 ESC (выход) 91 [
28 FS (Разделитель файлов) 92 \
29 GS (Разделитель групп) 93 ]
30 RS (Разделитель записей) 94 ^
31 США (разделитель единиц) 95 _
32 СП (Космос) 96 `
33 ! 97
34 " 98 б
35 # 99 с
36 $ 100 д
37 % 101 e
38 и 102 f
39 ' 103 г
40 ( 104 ч
41 ) 105 и
42 * 106 j
43 + 107 к
44 , 108 л
45 109 м
46 . 110 n
47 / 111 или
48 0 112 п
49 1 113 q
50 2 114 р
51 3 115 с
52 4 116 т
53 5 117 u
54 6 118 v
55 7 119 w
56 8 120 x
57 9 121 y
58 : 122 z
59 ; 123 {
60 < 124 |
61 = 125 }
62 > 126 ~
63 ? 127 DEL (удалить)

Строка

Модуль Модуль

Python string - это удобный универсальный инструмент для строковых констант, которые попадают в набор символов ASCII._` {|} ~ "" " printable = цифры + ascii_letters + знаки препинания + пробел

Большинство этих констант должны самодокументироваться в своих именах идентификаторов. Вскоре мы рассмотрим, что такое шестнадцатеричная цифра и восьмеричная цифра .

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

>>>
  >>> импортная строка

>>> s = "Что не так с ASCII?!?!?"
>>> s.rstrip (строка. пунктуация)
"Что не так с ASCII"
  

Примечание : строка.printable включает в себя все строку. пробел . Это немного не согласуется с другим методом проверки того, считается ли символ пригодным для печати, а именно str.isprintable () , который сообщит вам, что ни один из {'\ v', '\ n', '\ r', '\ f ',' \ t '} считаются пригодными для печати.

Тонкое различие связано с определением: str.isprintable () считает что-то печатаемым, если «все его символы считаются печатаемыми в repr () .”

Немного освежить

Сейчас хорошее время для краткого освежения информации о bit , наиболее фундаментальной единице информации, которую знает компьютер.

Бит — это сигнал, который имеет только два возможных состояния. Есть разные способы символического представления бита, которые означают одно и то же:

  • 0 или 1
  • «да» или «нет»
  • Верно или Ложно
  • «включено» или «выключено»

В нашей таблице ASCII из предыдущего раздела используется то, что мы с вами называем числами (от 0 до 127), но более точно называемые числами с основанием 10 (десятичными).

Вы также можете выразить каждое из этих чисел с основанием 10 последовательностью битов (основание 2). Вот двоичные версии от 0 до 10 в десятичном виде:

Десятичный Двоичный (компактный) Двоичный (заполненная форма)
0 0 00000000
1 1 00000001
2 10 00000010
3 11 00000011
4 100 00000100
5 101 00000101
6 110 00000110
7 111 00000111
8 1000 00001000
9 1001 00001001
10 1010 00001010

Обратите внимание, что по мере увеличения десятичного числа n вам потребуется больше значащих битов для представления набора символов, включая это число.

Вот удобный способ представления строк ASCII как последовательности битов в Python. Каждый символ из строки ASCII получает псевдокодирование в 8 бит с пробелами между 8-битными последовательностями, каждая из которых представляет один символ:

>>>
  >>> def make_bitseq (s: str) -> str:
... если не s.isascii ():
... поднять ValueError ("Допускается только ASCII")
... return "" .join (f "{ord (i): 08b}" для i в s)

>>> make_bitseq ("биты")
'01100010 01101001 01110100 01110011'

>>> make_bitseq ("ЗАГЛАВКИ")
'01000011 01000001 01010000 01010011'

>>> make_bitseq ("25 долларов.43 ")
'00100100 00110010 00110101 00101110 00110100 00110011'

>>> make_bitseq ("~ 5")
'01111110 00110101'
  

Примечание : .isascii () был введен в Python 3.7.

Строка f f "{ord (i): 08b}" использует мини-язык спецификации формата Python, который является способом указания форматирования для полей замены в строках формата:

  • Левая часть двоеточия, ord (i) , представляет собой фактический объект, значение которого будет отформатировано и вставлено в вывод.Использование функции Python ord () дает вам кодовую точку base-10 для одного символа str .

  • Правая часть двоеточия — это спецификатор формата. 08 означает шириной 8, 0 с дополнением , а b функционирует как знак для вывода результирующего числа с основанием 2 (двоичное).

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

Нам нужно больше бит!

Есть критически важная формула, связанная с определением бита. Учитывая количество битов, n , количество различных возможных значений, которые могут быть представлены в n битах, равно 2 n :

  def n_possible_values ​​(nbits: int) -> int:
    вернуть 2 ** нбит
  

Вот что это значит:

  • 1 бит позволит вам выразить 2 1 == 2 возможных значений.
  • 8 бит позволят вам выразить 2 8 == 256 возможных значений.
  • 64 бита позволят вам выразить 2 64 == 18,446,744,073,709,551,616 возможных значений.

Из этой формулы следует следствие: учитывая диапазон различных возможных значений, как мы можем найти количество битов, n , которое требуется для полного представления диапазона? Вы пытаетесь найти n в уравнении 2 n = x (где вы уже знаете x ).

Вот что из этого получается:

>>>
  >>> from math import ceil, log

>>> def n_bits_required (nvalues: int) -> int:
... вернуть ceil (log (nvalues) / log (2))

>>> n_bits_required (256)
8
  

Причина, по которой вам нужно использовать потолок в n_bits_required () , состоит в том, чтобы учесть значения, которые не являются чистыми степенями 2. Скажем, вам нужно сохранить набор символов из 110 символов. Наивно, это должно занять log (110) / log (2) == 6.781 бит, но нет такого понятия, как 0,781 бит. 110 значений потребуют 7 бит, а не 6, при этом последние слоты не нужны:

>>>
  >>> n_bits_required (110)
7
  

Все это служит доказательством одной концепции: ASCII, строго говоря, является 7-битным кодом. Таблица ASCII, которую вы видели выше, содержит 128 кодовых точек и символов, от 0 до 127 включительно. Для этого требуется 7 бит:

>>>
  >>> n_bits_required (128) # от 0 до 127
7
>>> n_possible_values ​​(7)
128
  

Проблема в том, что современные компьютеры почти ничего не хранят в 7-битных слотах.Они передают данные в единицах по 8 бит, обычно известных как байт .

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

Это означает, что дисковое пространство, используемое ASCII, наполовину пусто. Если неясно, почему это так, вспомните приведенную выше таблицу преобразования десятичных чисел в двоичные. Вы можете выразить числа 0 и 1 всего одним битом, или вы можете использовать 8 битов, чтобы выразить их как 00000000 и 00000001, соответственно.

Вы, , можете выразить числа от 0 до 3 всего с 2 битами или от 00 до 11, или вы можете использовать 8 битов, чтобы выразить их как 00000000, 00000001, 00000010 и 00000011, соответственно. Самая высокая кодовая точка ASCII, 127, требует только 7 значащих битов.

Зная это, вы можете видеть, что make_bitseq () преобразует строки ASCII в представление байтов str , где каждый символ занимает один байт:

>>>
  >>> make_bitseq ("биты")
'01100010 01101001 01110100 01110011'
  
Недостаточное использование

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

Эти разные кодировки не только конфликтовали друг с другом, но и каждая из них сама по себе оставалась крайне неполным представлением персонажей мира, несмотря на то, что в них использовался один дополнительный бит.

Спустя годы одна мега-схема кодирования символов стала управлять всеми ими. Однако, прежде чем мы перейдем к делу, давайте поговорим на минутку о системах нумерации, которые являются фундаментальной основой схем кодирования символов.

Охватывая все основы: другие системы счисления

При обсуждении ASCII выше вы видели, что каждый символ отображается на целое число в диапазоне от 0 до 127.

Этот диапазон чисел выражается в десятичной системе счисления (основание 10). Это способ, которым вы, я и остальные из нас, людей, привыкли считать, и нет более сложной причины, чем то, что у нас 10 пальцев.

Но есть и другие системы нумерации, которые особенно распространены в исходном коде CPython. Хотя «базовое число» одно и то же, все системы нумерации — это просто разные способы выражения одного и того же числа.

Если бы я спросил вас, какое число представляет собой строка "11" , вы были бы правы, бросив на меня странный взгляд, прежде чем ответить, что оно представляет собой одиннадцать.

Однако это строковое представление может выражать разные базовые числа в разных системах нумерации. В дополнение к десятичной системе счисления альтернативы включают следующие общепринятые системы нумерации:

  • Двоичный : базовый 2
  • Octal : база 8
  • Шестнадцатеричное (шестнадцатеричное) : основание 16

Но что для нас означает утверждение, что в определенной системе счисления числа представлены в базе N ?

Вот лучший из известных мне способов сформулировать, что это означает: это количество пальцев, на которые вы рассчитываете в этой системе.

Если вам нужно более полное, но все же мягкое введение в системы счисления, то книга Чарльза Петцольда Code — невероятно крутая книга, в которой подробно исследуются основы компьютерного кода.

Один из способов продемонстрировать, как разные системы нумерации интерпретируют одно и то же, — использовать конструктор Python int () . Если вы передадите str в int () , Python по умолчанию будет считать, что строка выражает число в базе 10, если вы не укажете иное:

>>>
  >>> int ('11 ')
11
>>> int ('11 ', base = 10) # 10 уже по умолчанию
11
>>> int ('11 ', base = 2) # Двоичный
3
>>> int ('11 ', base = 8) # Восьмеричный
9
>>> int ('11 ', base = 16) # Шестнадцатеричный
17
  

Существует более распространенный способ сообщить Python, что ваше целое число набрано с основанием, отличным от 10.Python принимает буквальных форм каждой из трех альтернативных систем нумерации, указанных выше:

Тип литерала Префикс Пример
н / д нет данных 11
Двоичный литерал 0b или 0B 0b11
Восьмеричный литерал 0o или 0O 0o11
Шестнадцатеричный литерал 0x или 0X 0x11

Все это подформы целочисленных литералов .Вы можете видеть, что они дают те же результаты, что и вызовы int () с нестандартными значениями base , отличными от значений по умолчанию. Все они просто от до Python:

>>>
  >>> 11
11
>>> 0b11 # Двоичный литерал
3
>>> 0o11 # Восьмеричный литерал
9
>>> 0x11 # шестнадцатеричный литерал
17
  

Вот как вы можете ввести двоичный, восьмеричный и шестнадцатеричный эквиваленты десятичных чисел от 0 до 20. Любой из них совершенно допустим в оболочке интерпретатора Python или в исходном коде, и все они имеют тип int :

Десятичный двоичный восьмеричное Шестигранник
0 0b0 0o0 0x0
1 0b1 0o1 0x1
2 0b10 0o2 0x2
3 0b11 0o3 0x3
4 0b100 0o4 0x4
5 0b101 0o5 0x5
6 0b110 0o6 0x6
7 0b111 0o7 0x7
8 0b1000 0o10 0x8
9 0b1001 0o11 0x9
10 0b1010 0o12 0xa
11 0b1011 0o13 0xb
12 0b1100 0o14 0xc
13 0b1101 0o15 0xd
14 0b1110 0o16 0xe
15 0b1111 0o17 0xf
16 0b10000 0o20 0x10
17 0b10001 0o21 0x11
18 0b10010 0o22 0x12
19 0b10011 0o23 0x13
20 0b10100 0o24 0x14

Удивительно, насколько распространены эти выражения в стандартной библиотеке Python.Если вы хотите в этом убедиться, перейдите туда, где находится ваш каталог lib / python3.7 / , и проверьте использование шестнадцатеричных литералов, например:

  $ grep -nri --include "* \. Py" -e "\ b0x" lib / python3.7
  

Это должно работать в любой системе Unix, имеющей grep . Вы можете использовать «\ b0o» для поиска восьмеричных литералов или «\ b0b» для поиска двоичных литералов.

Каков аргумент в пользу использования этих альтернативных синтаксисов литералов int ? Короче говоря, это потому, что 2, 8 и 16 — это степени двойки, а 10 — нет.Эти три альтернативные системы счисления иногда предлагают способ выражения значений в удобной для компьютера манере. Например, число 65536 или 2 16 — это всего лишь 10000 в шестнадцатеричном формате или 0x10000 в виде шестнадцатеричного литерала Python.

Введите Unicode

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

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

Думайте о Юникоде как об огромной версии таблицы ASCII, имеющей 1114 112 возможных кодовых точек. Это от 0 до 1,114,111 или от 0 до 17 * (2 16 ) — 1 или 0x10ffff в шестнадцатеричном формате.Фактически, ASCII — идеальное подмножество Unicode. Первые 128 символов в таблице Unicode в точности соответствуют символам ASCII, которые, как вы разумно ожидали, от них будут.

Для большей технической точности сам код Unicode — это , а не как кодировка . Скорее, Unicode — это , реализованный с помощью различных кодировок символов, которые вы скоро увидите. Unicode лучше рассматривать как карту (что-то вроде dict ) или таблицу базы данных с двумя столбцами.Он отображает символы (например, "a" , "¢" или даже "ቈ" ) в различные положительные целые числа. Кодировка символов должна предлагать немного больше.

Unicode содержит практически все символы, которые вы можете себе представить, включая дополнительные непечатаемые. Один из моих любимых — надоедливый знак с написанием справа налево, который имеет кодовую точку 8207 и используется в тексте с языковыми алфавитами как слева направо, так и справа налево, например в статьях, содержащих абзацы на английском и арабском языках. .

Примечание: Мир кодировок символов — одна из многих мелких технических деталей, над которыми некоторые люди любят придираться. Одна из таких деталей заключается в том, что фактически можно использовать только 1111998 кодовых точек Unicode по нескольким архаичным причинам.

Unicode против UTF-8

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

Вы также видели выше, что Unicode технически не является полноценной кодировкой символов. Это почему?

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

Unicode — это абстрактный стандарт кодирования, а не кодирование. Вот где в игру вступают UTF-8 и другие схемы кодирования. Стандарт Unicode (карта символов для кодовых точек) определяет несколько различных кодировок из своего единственного набора символов.

UTF-8, а также его менее используемые родственники, UTF-16 и UTF-32, являются форматами кодирования для представления символов Unicode в виде двоичных данных из одного или нескольких байтов на символ. Мы обсудим UTF-16 и UTF-32 чуть позже, но UTF-8, безусловно, занял большую часть пирога.

Это подводит нас к давно назревшему определению. Что означает формально кодировать и декодировать ?

Кодирование и декодирование в Python 3

Тип

Python 3 str предназначен для представления удобочитаемого текста и может содержать любой символ Юникода.

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

Кодирование и декодирование — это процесс перехода от одного к другому:

Кодирование и декодирование (Изображение: Real Python)

В .encode () и .decode () параметр кодировки по умолчанию равен «utf-8» , хотя, как правило, более безопасно и однозначно указывать это:

>>>
  >>> "резюме".кодировать ("utf-8")
b'r \ xc3 \ xa9sum \ xc3 \ xa9 '
>>> "Эль-Ниньо" .encode ("utf-8")
b'El Ni \ xc3 \ xb1o '

>>> b "r \ xc3 \ xa9sum \ xc3 \ xa9" .decode ("utf-8")
'резюме'
>>> b "Эль-Нинь \ xc3 \ xb1o" .decode ("utf-8")
'Эль-Ниньо'
  

Результатом str.encode () является объект байта байт. Оба байтовых литерала (например, b "r \ xc3 \ xa9sum \ xc3 \ xa9" ) и представления байтов допускают только символы ASCII.

Вот почему при вызове «Эль-Ниньо».encode ("utf-8") , ASCII-совместимый "El" может быть представлен как есть, но n с тильдой заменяется на "\ xc3 \ xb1" . Эта беспорядочная последовательность представляет собой два байта, 0xc3 и 0xb1 в шестнадцатеричном формате:

>>>
  >>> "" .join (f "{i: 08b}" для i in (0xc3, 0xb1))
'11000011 10110001'
  

То есть, для символа - требуется два байта для его двоичного представления в UTF-8.

Примечание : если вы наберете help (str.encode) , вы, вероятно, увидите значение по умолчанию encoding = 'utf-8' . Будьте осторожны, исключая это и просто используйте "резюме" .encode () , потому что значение по умолчанию может быть другим в Windows до Python 3.6.

Python 3: все на Unicode

Python 3 полностью использует Unicode и UTF-8. Вот что это значит:

  • Исходный код Python 3 по умолчанию считается UTF-8.Это означает, что вам не нужна кодировка # - * -: UTF-8 - * - в верхней части файлов .py в Python 3.

  • Весь текст ( str ) по умолчанию - Unicode. Закодированный текст Unicode представлен в виде двоичных данных ( байт, ). Тип str может содержать любой буквальный символ Unicode, например «Δv / Δt» , все из которых будут сохранены как Unicode.

  • Python 3 принимает множество кодовых точек Unicode в идентификаторах, что означает résumé = "~ / Documents / resume.pdf " действителен, если это вам нравится.

  • Модуль Python re по умолчанию использует флаг re.UNICODE , а не re.ASCII . Это означает, например, что r "\ w" соответствует символам слова Unicode, а не только буквам ASCII.

  • По умолчанию кодирует в str.encode () и байтах. Decode () - UTF-8.

Есть еще одно свойство, которое является более тонким: кодировка по умолчанию для встроенной open () зависит от платформы и зависит от значения локали .getpreferredencoding () :

>>>
  >>> # Mac OS X High Sierra
>>> импортировать локаль
>>> locale.getpreferredencoding ()
'UTF-8'

>>> # Windows Server 2012; другие сборки Windows могут использовать UTF-16
>>> импортировать локаль
>>> locale.getpreferredencoding ()
'cp1252'
  

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

Один байт, два байта, три байта, четыре

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

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

>>>
  >>> all (len (chr (i) .encode ("ascii")) == 1 для i в диапазоне (128))
Правда
  

UTF-8 совсем другой.Данный символ Unicode может занимать от одного до четырех байтов. Вот пример одного символа Юникода, занимающего четыре байта:

>>>
  >>> ibrow = "🤨"
>>> len (ibrow)
1
>>> ibrow.encode ("utf-8")
б '\ xf0 \ x9f \ xa4 \ xa8'
>>> len (ibrow.encode ("utf-8"))
4

>>> # Calling list () для байтового объекта дает вам
>>> # десятичное значение для каждого байта
>>> список (b '\ xf0 \ x9f \ xa4 \ xa8')
[240, 159, 164, 168]
  

Это тонкая, но важная особенность len () :

  • Длина одного символа Юникода в Python str будет всегда равна 1, независимо от того, сколько байтов он занимает.
  • Длина одного и того же символа, закодированного в байт, будет где-то между 1 и 4.

В таблице ниже приведены общие типы символов, которые помещаются в каждый сегмент длины байта:

Десятичный диапазон Hex Диапазон Что включено Примеры
0 до 127 "\ u0000" до "\ u007F" США ASCII "A" , "\ n" , "7" , "&"
128 до 2047 "\ u0080" от до "\ u07FF" Большинство латинских алфавитов * "ę" , "±" , "" , "ñ"
2048 до 65535 "\ u0800" от до "\ uFFFF" Дополнительные детали многоязычного самолета (БМП) ** "" , "ᄇ" , "ᮈ" , "‰"
65536 до 1114111 "\ U00010000" от до "\ U0010FFFF" Другое *** "" , "𐀀" , "" , "🂲" ,

* Например, английский, арабский, греческий и ирландский
** Огромный набор языков и символов - в основном китайский, японский и корейский по объему (также ASCII и латинские алфавиты)
*** Дополнительный китайский , Японские, корейские и вьетнамские символы, а также другие символы и смайлы

Примечание : Чтобы не упустить из виду общую картину, существует дополнительный набор технических функций UTF-8, которые здесь не рассматриваются, поскольку они редко видны пользователю Python.

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

В статье

Википедии о UTF-8 не упускают из виду технические детали, и всегда есть официальный стандарт Unicode, который поможет вам читать.

А как насчет UTF-16 и UTF-32?

Вернемся к двум другим вариантам кодировки, UTF-16 и UTF-32.

На практике разница между ними и UTF-8 существенна. Вот пример того, насколько велика разница при двустороннем преобразовании:

>>>
  >>> letter = "αβγδ"
>>> rawdata = letter.encode ("utf-8")
>>> rawdata.decode ("utf-8")
'αβγδ'
>>> rawdata.decode ("utf-16") # 😧
'뇎닎 돎듎'
  

В этом случае кодирование четырех греческих букв с помощью UTF-8 и последующее декодирование обратно в текст в UTF-16 приведет к получению текста str , который написан на совершенно другом языке (корейском).

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

В этой таблице указаны диапазон или количество байтов в UTF-8, UTF-16 и UTF-32:

Кодировка байта на символ (включительно) переменной длины
UTF-8 1 по 4 Есть
UTF-16 от 2 до 4 Есть
UTF-32 4

Еще одним любопытным аспектом семейства UTF является то, что UTF-8 не будет всегда занимать меньше места, чем UTF-16.Это может показаться математически нелогичным, но вполне возможно:

>>>
  >>> text = "記者 鄭啟源 羅智堅"
>>> len (text.encode ("utf-8"))
26 год
>>> len (text.encode ("utf-16"))
22
  

Причина этого в том, что кодовые точки в диапазоне от U + 0800 до U + FFFF (от 2048 до 65535 в десятичной форме) занимают три байта в UTF-8 по сравнению с двумя в UTF-16.

Я ни в коем случае не рекомендую вам садиться в поезд UTF-16, независимо от того, работаете ли вы на языке, символы которого обычно находятся в этом диапазоне.Среди других причин один из веских аргументов в пользу использования UTF-8 заключается в том, что в мире кодирования отличная идея - сливаться с толпой.

Не говоря уже о том, что это 2019 год: память компьютера дешевая, поэтому экономия 4 байтов за счет использования UTF-16, вероятно, не стоит того.

Встроенные функции Python

Вы прошли через трудную часть. Пришло время использовать то, что вы уже видели в Python.

Python имеет группу встроенных функций, которые так или иначе связаны с системами нумерации и кодировкой символов:

Их можно логически сгруппировать в зависимости от их назначения:

  • ascii () , bin () , hex () и oct () предназначены для получения другого представления ввода.Каждый из них производит str . Первый, ascii () , создает представление объекта только в формате ASCII с экранированными символами, отличными от ASCII. Остальные три дают двоичное, шестнадцатеричное и восьмеричное представление целого числа соответственно. Это всего лишь представлений , а не фундаментальное изменение ввода.

  • байт () , str () и int () являются конструкторами классов для своих соответствующих типов, байт , str и int .Каждый из них предлагает способы принуждения ввода к желаемому типу. Например, как вы видели ранее, хотя int (11.0) , вероятно, более распространен, вы также можете увидеть int ('11 ', base = 16) .

  • ord () и chr () являются инверсиями друг друга в том смысле, что функция Python ord () преобразует символ str в его кодовую точку base-10, а chr () делает противоположный.

Вот более подробный взгляд на каждую из этих девяти функций:

Функция Подпись Принимает Тип возврата Назначение
ascii () ascii (obj) Варьируется ул. Представление объекта только в формате ASCII с экранированными символами, отличными от ASCII.
бин () бункер (номер) номер: внутренний ул. Двоичное представление целого числа с префиксом «0b»
байт () байт (iterable_of_ints)

байт (s, enc [, errors])

байт (bytes_or_buffer)

байт ([i])

Варьируется байт Привести (преобразовать) вход в байт , необработанные двоичные данные
chr () chr (i) i: int

i> = 0

i <= 1114111

ул. Преобразование целочисленной кодовой точки в один символ Юникода
шестигранник () шестнадцатеричный (номер) номер: внутренний ул. Шестнадцатеричное представление целого числа с префиксом «0x»
внутр () int ([x])

int (x, base = 10)

Варьируется внутренний Привести (преобразовать) вход в int
окт () окт (номер) номер: внутренний ул. Восьмеричное представление целого числа с префиксом «0o»
порядковый номер () орд (в) c: str

len (c) == 1

внутренний Преобразование одиночного символа Юникода в его целочисленную кодовую точку
ул. () str (object = ’‘)

str (b [, enc [, errors]])

Варьируется ул. Привести (преобразовать) ввод к str , текст

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

ascii () дает вам представление объекта только в формате ASCII с экранированными символами, отличными от ASCII:

>>>
  >>> ascii ("abcdefg")
"'abcdefg'"

>>> ascii ("халепеньо")
"'Джалепе \\ xf1o'"

>>> ascii ((1, 2, 3))
'(1, 2, 3)'

>>> ascii (0xc0ffee) # Шестнадцатеричный литерал (int)
"12648430"
  

bin () дает двоичное представление целого числа с префиксом «0b» :

>>>
  >>> корзина (0)
'0b0'

>>> корзина (400)
'0b110010000'

>>> bin (0xc0ffee) # Шестнадцатеричный литерал (int)
'0b110000001111111111101110'

>>> [bin (i) for i in [1, 2, 4, 8, 16]] # `int` + понимание списка
['0b1', '0b10', '0b100', '0b1000', '0b10000']
  

байт () приводит входные данные к байтам , представляя необработанные двоичные данные:

>>>
  >>> # Итерация целых чисел
>>> байты ((104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100))
привет мир

>>> bytes (range (97, 123)) # Итерация целых чисел
b'abcdefghijklmnopqrstuvwxyz '

>>> bytes ("real 🐍", "utf-8") # Строка + кодировка
б'реал \ xf0 \ x9f \ x90 \ x8d '

>>> байтов (10)
б '\ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00'

>>> байтов.fromhex ('c0 ff ee')
б '\ xc0 \ xff \ xee'

>>> bytes.fromhex ("72 65 61 6c 70 79 74 68 6f 6e")
b 'альпифон'
  

chr () преобразует целочисленную кодовую точку в один символ Unicode:

>>>
  >>> chr (97)
'а'

>>> chr (7048)
'ᮈ'

>>> chr (1114111)
'\ U0010ffff'

>>> chr (0x10FFFF) # Шестнадцатеричный литерал (int)
'\ U0010ffff'

>>> chr (0b01100100) # Двоичный литерал (int)
'd'
  

hex () дает шестнадцатеричное представление целого числа с префиксом «0x» :

>>>
  >>> шестнадцатеричный (100)
'0x64'

>>> [hex (i) для i в [1, 2, 4, 8, 16]]
['0x1', '0x2', '0x4', '0x8', '0x10']

>>> [hex (i) для i в диапазоне (16)]
['0x0', '0x1', '0x2', '0x3', '0x4', '0x5', '0x6', '0x7',
 '0x8', '0x9', '0xa', '0xb', '0xc', '0xd', '0xe', '0xf']
  

int () приводит к вводу int , опционально интерпретируя ввод в заданной базе:

>>>
  >>> int (11.0)
11

>>> int ('11 ')
11

>>> int ('11 ', основание = 2)
3

>>> int ('11 ', основание = 8)
9

>>> int ('11 ', основание = 16)
17

>>> int (0xc0ffee - 1.0)
12648429

>>> int.from_bytes (b "\ x0f", "маленький")
15

>>> int.from_bytes (b '\ xc0 \ xff \ xee', "большой")
12648430
  

Функция Python ord () преобразует один символ Юникода в его целочисленный код:

>>>
  >>> ord ("а")
97

>>> ord ("ę")
281

>>> ord ("ᮈ")
7048

>>> [ord (i) вместо i в "привет, мир"]
[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
  

str () приводит к вводу str , представляя текст:

>>>
  >>> str ("строка строки")
'строка строки'

>>> str (5)
'5'

>>> str ([1, 2, 3, 4]) # Как [1, 2, 3, 4].__str __ (), но используйте str ()
'[1, 2, 3, 4]'

>>> str (b "\ xc2 \ xbc чашка муки", "utf-8")
Стакана муки

>>> str (0xc0ffee)
"12648430"
  

Строковые литералы Python: способы снять шкуру с кошки

Вместо того, чтобы использовать конструктор str () , принято вводить str буквально:

>>>
  >>> еда = "креветки и крупа"
  

Это может показаться достаточно простым. Но интересная сторона дела заключается в том, что, поскольку Python 3 полностью ориентирован на Unicode, вы можете «набирать» символы Unicode, которые вы, вероятно, даже не найдете на своей клавиатуре.Вы можете скопировать и вставить это прямо в оболочку интерпретатора Python 3:

>>>
  >>> алфавит = 'αβγδεζηθικλμνξοπρςστυφχψ'
>>> печать (алфавит)
αβγδεζηθικλμνξοπρςστυφχψ
  

Помимо размещения фактических, неэкранированных символов Unicode в консоли, есть и другие способы ввода строк Unicode.

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

Частично в нем говорится, что существует до шести способов, которыми Python позволяет вам вводить один и тот же символ Unicode.

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

Последовательность побега Значение Как выразить "а"
"\ ooo" Знак с восьмеричным числом ооо "\ 141"
"\ xhh" Символ с шестнадцатеричным значением hh "\ x61"
"\ N {name}" Персонаж с именем имя в базе данных Unicode "\ N {СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A}"
"\ uxxxx" Символ с 16-битным (2-байтовым) шестнадцатеричным значением xxxx "\ u0061"
"\ Uxxxxxxxx" Символ с 32-битным (4-байтовым) шестнадцатеричным значением xxxxxxxx "\ U00000061"

Вот некоторые доказательства и подтверждения вышеизложенного:

>>>
  >>> (
... "а" ==
... "\ x61" ==
... "\ N {СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A}" ==
... "\ u0061" ==
... "\ U00000061"
...)
Правда
  

Теперь есть два основных предостережения:

  1. Не все эти формы подходят для всех персонажей. Шестнадцатеричное представление целого числа 300 - 0x012c , что просто не подходит для 2-значного escape-кода "\ xhh" . Наивысшая кодовая точка, которую вы можете втиснуть в эту escape-последовательность, - это "\ xff" ( "ÿ" ).Аналогично для "\ ooo" , он будет работать только до "\ 777" ( "ǿ" ).

  2. Для \ xhh , \ uxxxx и \ Uxxxxxxxx требуется ровно столько цифр, сколько показано в этих примерах. Это может вызвать зацикливание из-за того, что в таблицах Unicode обычно отображаются коды символов с ведущим U + и переменным количеством шестнадцатеричных символов. Ключевым моментом является то, что таблицы Unicode чаще всего не заполняют эти коды нулями.

Например, если вы обратитесь на unicode-table.com за информацией о готической букве faihu (или fehu), "𐍆" , вы увидите, что она имеет код U + 10346 .

Как поместить это в "\ uxxxx" или "\ Uxxxxxxxx" ? Ну, вы не можете поместить его в "\ uxxxx" , потому что это 4-байтовый символ, и чтобы использовать "\ Uxxxxxxxx" для представления этого символа, вам нужно будет ввести последовательность слева:

>>>
  >>> "\ U00010346"
'𐍆'
  

Это также означает, что форма "\ Uxxxxxxxx" является единственной escape-последовательностью, которая может содержать любой символ Unicode.

Примечание : Вот короткая функция для преобразования строк, которые выглядят как "U + 10346" , в нечто, с чем может работать Python. Он использует str.zfill () :

>>>
  >>> def make_uchr (код: str):
... return chr (int (code.lstrip ("U +"). zfill (8), 16))
>>> make_uchr ("U + 10346")
'𐍆'
>>> make_uchr ("U + 0026")
'&'
  

Другие кодировки, доступные в Python

На данный момент вы видели четыре кодировки символов:

  1. ASCII
  2. UTF-8
  3. UTF-16
  4. UTF-32

Есть масса других.

Одним из примеров является Latin-1 (также называемый ISO-8859-1), который технически является значением по умолчанию для протокола передачи гипертекста (HTTP) согласно RFC 2616. Windows имеет свой собственный вариант Latin-1, называемый cp1252.

Примечание : ISO-8859-1 все еще широко распространен в дикой природе. Библиотека запросов следует RFC 2616 «в буквальном смысле» в использовании ее в качестве кодировки по умолчанию для содержимого ответа HTTP или HTTPS. Если слово «текст» найдено в заголовке Content-Type , и никакая другая кодировка не указана, тогда запросы будут использовать ISO-8859-1.

Полный список принятых кодировок скрыт в документации для модуля кодеков , который является частью стандартной библиотеки Python.

Есть еще одна полезная распознанная кодировка, о которой следует знать, это «unicode-escape» . Если у вас есть декодированный str и вы хотите быстро получить представление его экранированного литерала Unicode, вы можете указать эту кодировку в .encode () :

>>>
  >>> alef = chr (1575) # Или "\ u0627"
>>> alef_hamza = chr (1571) # Или "\ u0623"
>>> алеф, алеф_хамза
('ا', 'أ')
>>> алеф.кодировать ("unicode-escape")
б '\\ u0627'
>>> alef_hamza.encode ("unicode-escape")
б '\\ u0623'
  

Вы знаете, что они говорят о предположениях…

Тот факт, что Python делает предположение о кодировке UTF-8 для файлов и кода, который генерирует вы, , не означает, что вы, программист, должны работать с такими же предположениями для внешних данных.

Давайте повторим это снова, потому что это правило, по которому следует жить: когда вы получаете двоичные данные (байты) из стороннего источника, будь то из файла или по сети, лучше всего проверить, что данные указывают кодировку .Если нет, то спросите сами.

Все операции ввода-вывода происходят в байтах, а не в тексте, и байты для компьютера - это просто единицы и нули, пока вы не укажете иное, сообщив ему кодировку.

Вот пример того, где что-то может пойти не так. Вы подписаны на API, который отправляет вам рецепт дня, который вы получаете в байтах и всегда без проблем декодировали с помощью .decode ("utf-8") . В этот день часть рецепта выглядит так:

>>>
  >>> data = b "\ xbc чашка муки"
  

Похоже, рецепт требует немного муки, но мы не знаем, сколько:

>>>
  >>> данные.декодировать ("utf-8")
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
UnicodeDecodeError: кодек utf-8 не может декодировать байт 0xbc в позиции 0: недопустимый начальный байт
  

Эээ . Есть эта надоедливая ошибка UnicodeDecodeError , которая может укусить вас, когда вы делаете предположения о кодировании. Вы уточняете у хоста API. И вот, данные на самом деле отправляются в кодировке Latin-1:

. >>>
  >>> data.decode ("латиница-1")
Стакана муки
  

Ну вот.В Latin-1 каждый символ помещается в один байт, тогда как символ «¼» занимает два байта в UTF-8 ( "\ xc2 \ xbc" ).

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

Если вам действительно нужно отказаться от поставки и угадать кодировку, то взгляните на библиотеку chardet , которая использует методологию Mozilla, чтобы сделать обоснованное предположение о неоднозначно закодированном тексте.Тем не менее, такой инструмент, как chardet , должен быть вашим последним средством, а не первым.

Шансы и окончания:

unicodedata

Было бы упущением не упомянуть unicodedata из стандартной библиотеки Python, которая позволяет вам взаимодействовать и выполнять поиск в базе данных символов Unicode (UCD):

>>>
  >>> импортировать уникоданные

>>> unicodedata.name ("€")
«ЗНАК ЕВРО»
>>> unicodedata.lookup («ЗНАК ЕВРО»)
'€'
  

Завершение

В этой статье вы раскрыли обширную и впечатляющую тему кодировки символов в Python.

Здесь вы много узнали:

  • Основные понятия кодировок символов и систем нумерации
  • Целочисленные, двоичные, восьмеричные, шестнадцатеричные, строковые и байтовые литералы в Python
  • Встроенные функции Python, связанные с системами кодировки и нумерации символов
  • Обработка текста в Python 3 по сравнению с двоичными данными

Теперь идите и закодируйте!

ресурсов

Чтобы получить более подробную информацию о затронутых здесь темах, посетите эти ресурсы:

В документации Python есть две страницы по теме:

Search API | Twitter API

Обзор

Предприятие

Корпоративные API доступны только в рамках наших уровней управляемого доступа.Чтобы использовать эти API, вы должны сначала создать учетную запись в нашем отделе корпоративных продаж. Чтобы узнать больше, смотрите ЗДЕСЬ.

Вы можете просмотреть все предложения Twitter API для поиска твитов ЗДЕСЬ.

Существует два API поисковой системы предприятия:

  1. API 30-дневного поиска предоставляет данные за предыдущие 30 дней.
  2. Full-Archive Search API обеспечивает полный и мгновенный доступ к полному массиву данных Twitter, начиная с первого твита в марте 2006 года.

Эти API-интерфейсы RESTful поддерживают один запрос длиной до 2048 символов на запрос. Запросы написаны с использованием синтаксиса правил PowerTrack - подробнее см. Правила и фильтрация. Пользователи могут указать любой период времени с точностью до минуты. Однако ответы будут ограничены меньшим из указанных вами maxResults ИЛИ 31 днем ​​и будут включать следующий токен для разбивки на страницы для следующего набора результатов. Если временные параметры не указаны, API вернет совпадающие данные за последние 30 дней.

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

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

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

Типы запросов

API поисковой системы предприятия поддерживают два типа запросов:

Поисковые запросы (данные)

Поисковые запросы к API поисковой системы предприятия позволяют получать до 500 результатов за ответ в течение заданного периода времени с возможностью разбивки на страницы для дополнительных данных.Используя параметр maxResults, вы можете указать меньший размер страницы для вариантов использования дисплея (позволяющий пользователю запрашивать больше результатов по мере необходимости) или больший размер страницы (до 500) для больших объемов данных. Данные предоставляются в обратном хронологическом порядке и соответствуют на момент доставки.

Подсчет запросов (количество твитов)
Запросы

Counts предоставляют возможность извлекать исторические счетчики активности, которые отражают количество действий, которые произошли, которые соответствуют заданному запросу в течение запрошенного периода времени.Ответ по существу предоставит вам гистограмму подсчетов, разбитых по дням, часам или минутам (сегмент по умолчанию - часов ). Важно отметить, что результаты подсчета не всегда отражают события соответствия (например, удаление твитов), которые происходят спустя много времени после (7+ дней) публикации твита; поэтому ожидается, что метрика счетчиков не всегда может совпадать с метрикой запроса данных для того же запроса.

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

Доступные операторы

API-интерфейсы

Enterprise Search поддерживают правила длиной до 2048 символов. API поисковой системы предприятия поддерживают перечисленные ниже операторы. Подробное описание смотрите ЗДЕСЬ.

Соответствие содержанию твита:
Сопоставление по интересующим счетам:
Атрибуты твита:
Геопространственные операторы:
  • ключевое слово
  • «цитированная фраза»
  • «ключевое слово1 ключевое слово2» ~ N
  • #
  • @
  • $
  • URL:
  • язык:
  • это: ретвит
  • имеет: упоминания
  • имеет: хэштеги
  • имеет: media
  • имеет: видео
  • имеет: изображений
  • имеет: ссылки
  • имеет: символы
  • это: проверено
  • -is: nullcast (оператор только отрицания)
  • bounding_box: [west_long south_lat east_long north_lat]
  • point_radius: [долгий радиус]
  • имеет: geo
  • место:
  • страна-место:
  • имеет: profile_geo
  • profile_country:
  • profile_region:
  • profile_locality:


Примечания. Не используйте операторы встраивания / вложения ("#cats") для кошек с помощью API поиска.Оператор ‘lang:’ и все операторы ‘is:’ и ‘has:’ не могут использоваться как отдельные операторы и должны сочетаться с другим предложением (например, @twitterdev has: links).

Search API используют ограниченный набор операторов из-за функциональности токенизации / сопоставления. Корпоративные API реального времени и пакетные исторические API предоставляют дополнительные операторы. Смотрите ЗДЕСЬ для получения более подробной информации.

Дополнительные сведения см. В руководстве «Начало работы с операторами».

Наличие данных / важная дата

При использовании API поиска с полным архивом имейте в виду, что платформа Twitter продолжает развиваться с 2006 года.По мере добавления новых функций к базовым объектам JSON добавлялись новые метаданные. По этой причине важно понимать, когда были добавлены атрибуты твита, по которым совпадают операторы поиска. Ниже приведены некоторые из наиболее важных дат рождения важных групп метаданных. Чтобы узнать больше о том, когда впервые были введены атрибуты твита, см. Это руководство.

  • Первый твит: 21.03.2006
  • Первые нативные ретвиты: 06.11.2009
  • Первые твиты с геотегами: 19.11.2009
  • URL-адресов, впервые проиндексированных для фильтрации: 27.08.2011
  • Метаданные расширенного расширения URL (названия и описания веб-сайтов): 01.12.2014
  • Profile Geo метаданные и фильтрация: 17.02.2015

Обновление данных и изменчивость

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

Эти изменяемые данные делятся на две категории:

  • Метаданные объекта пользователя:
    • @handle пользователя (числовой идентификатор никогда не меняется)
    • Биологическое описание
    • Счетов: статусы, подписчики, друзья, избранное, списки
    • Расположение профиля
    • Другие данные, такие как часовой пояс и язык
  • Статистика твитов - то есть все, что может быть изменено на платформе действиями пользователя (примеры ниже):
    • Количество избранных
    • Количество ретвитов

В большинстве случаев API поиска будет возвращать данные в том виде, в котором они существуют на платформе, во время запроса , а не во время создания твита.Однако в случае запросов с использованием операторов выбора (например, from, to, @, is: Verified) это может быть не так. Данные обновляются в нашем индексе на регулярной основе с повышенной частотой для самых последних таймфреймов. В результате в некоторых случаях возвращенные данные могут не точно соответствовать текущим данным, отображаемым на Twitter.com, но совпадать с данными на момент последней индексации.

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

Однопоточные и многопоточные запросы

У каждого клиента есть определенный предел скорости для конечной точки поиска. Предел поминутной скорости по умолчанию для поиска в полном архиве составляет 120 запросов в минуту, в среднем 2 запроса в секунду (QPS). Это среднее количество запросов в секунду означает, что теоретически можно делать 2 запроса к API каждую секунду. С учетом функции нумерации страниц продукта, если с однолетним запросом связан один миллион твитов, равномерно распределенных в течение года, для получения всех данных потребуется более 2000 запросов (при условии, что «maxResults» составляет 500).Предположим, что на ответ требуется две секунды, то есть 4000 секунд (или чуть более часа) для последовательного / последовательного извлечения всех этих данных через один поток (1 запрос в секунду с использованием токена «следующего» предыдущего ответа). Неплохо!

Теперь рассмотрим ситуацию, когда для приема данных используются двенадцать параллельных потоков. Предполагая равномерное распределение одного миллиона твитов в течение одного года, вы можете разделить запросы на двенадцать параллельных потоков (многопоточных) и использовать больше предельной скорости в секунду для одного «задания».Другими словами, вы можете запускать один поток в месяц, который вас интересует, и тем самым данные могут извлекаться в 12 раз быстрее (или ~ 6 минут).

Этот многопоточный пример одинаково хорошо применим к конечной точке counts. Например, если вы хотите получать количество твитов за двухлетний период, вы можете сделать однопоточный запрос и вернуться назад через счет 31 день за раз. Если предположить, что на ответ требуется 2 секунды, то потребуется около 48 секунд, чтобы сделать 24 запроса API и получить весь набор счетчиков.Однако у вас также есть возможность отправить несколько месячных запросов за раз. При выполнении 12 запросов в секунду весь набор счетчиков может быть получен примерно за 2 секунды.

Логика повтора

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

Если запрос не выполняется 4 раза подряд, и вы подождите не менее 10 минут между сбоями, выполните следующие действия для устранения неполадок:

  • Повторите запрос после сокращения времени, которое он покрывает.Повторите это до 6-часового временного окна, если безуспешно.
  • Если вы объединяете большое количество терминов вместе, разделите их на отдельные правила и повторите попытку для каждого по отдельности.
  • Если вы используете большое количество исключений в своем правиле, уменьшите количество отрицаемых членов в правиле и повторите попытку.

Следующие шаги

Что такое 256-битное шифрование? Сколько времени потребуется, чтобы взломать?

«В нем говорится, что 256-битное шифрование… это хорошо?»

Большинство людей постоянно используют термин «256-битное шифрование» и, если честно, совершенно не понимают, что он означает и насколько он надежен.Как только вы выйдете за пределы поверхностного уровня, «оно шифрует данные и делает их нечитаемыми», шифрование становится невероятно сложной задачей. Это не легкое чтение. Большинство из нас не хранят книгу о модульном возведении в степень на крайнем столе рядом с нашими кроватями.

Вот почему понятно, что может возникнуть некоторая путаница, когда дело доходит до сильных сторон шифрования, что они означают, что «хорошо» и т. Д. Есть много вопросов о шифровании, особенно о 256-битном шифровании.

Главный из них: насколько надежно 256-битное шифрование?

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

Давайте разберемся.

Быстрое напоминание о шифровании в целом

Когда вы что-то шифруете, вы берете незашифрованный данные, называемые открытым текстом, и выполнение на них алгоритмической функции для создания кусок зашифрованного зашифрованного текста. Алгоритм, который вы используете, называется ключом.С за исключением открытых ключей при асимметричном шифровании, значение ключ шифрования необходимо хранить в секрете. Закрытый ключ, связанный с этим фрагмент зашифрованного текста - единственное практическое средство его расшифровки.

Все это звучит невероятно абстрактно, поэтому давайте рассмотрим пример. И мы оставим Боба и Алису в стороне, поскольку они заняты объяснением шифрования буквально на всех других примерах в Интернете.

Давайте пойдем с Джеком и Дайаной, и допустим, что Джек хочет отправить Дайане сообщение, в котором говорится: «О да, жизнь продолжается.”

Джек воспользуется своим сообщением и воспользуется алгоритмом. или cipher - ключ шифрования - для преобразования сообщения в зашифрованный текст. Теперь он передаст его Дайане вместе с ключом, который можно использовать для расшифровки сообщение, чтобы его снова можно было прочитать.

Пока никто не достанет ключ, зашифрованный текст бесполезен, потому что его нельзя прочитать.

Как работает современное шифрование?

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

Ключ или определенный алгоритм используется для шифрования данных, и только другая сторона, знающая соответствующий закрытый ключ, может расшифровать Это.

В этом примере, а не в письменном сообщении, в котором мрачно утверждается, что жизнь продолжается даже после того, как радость потеряна, Джек и Дайана «делают все, что могут» на компьютерах (все еще «держатся» до 16 »- извините, это Джон Мелленкамп шутит, что, вероятно, не имеет смысла за пределами США).Теперь шифрование, которое должно произойти, является цифровым.

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

Но что на самом деле шифруется? Как вы шифруете «данные»?

В исходном примере на физическом листе бумаги были буквы, которые были превращены во что-то еще.Но как компьютер шифрует данные?

Это восходит к тому, как компьютеры на самом деле обрабатывают данные. Компьютеры хранят информацию в двоичной форме. Комбинации 1 и 0. Любые данные, вводимые в компьютер, кодируются так, чтобы их могла прочитать машина. Именно эти закодированные данные в необработанном виде шифруются. На самом деле это часть того, что входит в различные типы файлов, используемых сертификатами SSL / TLS, частично это зависит от того, какой тип схемы кодирования вы пытаетесь зашифровать.

Итак, компьютер Джека шифрует закодированные данные и передает его на компьютер Дайан, который использует связанный закрытый ключ для расшифровки и чтения данные.

Опять же, пока закрытый ключ остается, вы знаете ... закрытым, шифрование остается безопасным.

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

В 1970-х годах трио криптографов, Ральф Меркл, Уитфилд Диффи и Мартин Хеллман начали работу над способом безопасного обмена ключ шифрования в незащищенной сети под наблюдением злоумышленника.Им удалось на теоретическом уровне, но не смогли придумать асимметричный функция шифрования, которая была практичной. У них также не было механизма аутентификации (но это совершенно другой разговор). Меркл придумал первоначальный концепции, но его имя не связано с протоколом обмена ключами, который они изобретен - несмотря на протесты двух других его создателей.

Примерно через год Рон Ривест, Ади Шамир и Леонард Адлеман создали одноименный метод обмена ключами, основанный на обмене ключами Диффи-Хеллмана (RSA), который также включал функции шифрования / дешифрования и аутентификации.Это актуально, потому что это было рождением совершенно новой итерации шифрования: асимметричного шифрования.

Они также дали нам вышеупомянутых Боба и Алису, что, по крайней мере, для меня, делает это своего рода стиркой.

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

Сравнение асимметричного шифрования и симметричного шифрования

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

С другой стороны, асимметричное шифрование

иногда называют шифрованием с открытым ключом. Лучше думать об асимметричном шифровании как об одностороннем шифровании.

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

Асимметричное шифрование используется в основном как механизм обмена симметричными закрытыми ключами.Причина в том, что асимметричное шифрование исторически является более дорогостоящей функцией из-за размера его ключей. Таким образом, криптография с открытым ключом используется больше как внешняя стена, чтобы помочь защитить стороны, поскольку они облегчают соединение, в то время как симметричное шифрование используется в самом фактическом соединении.

2048-битные ключи против 256-битных ключей

В SSL / TLS асимметричное шифрование выполняет одну чрезвычайно важную функцию. Это позволяет клиенту зашифровать данные, которые будут использоваться обеими сторонами для получения симметричных ключей сеанса, которые они будут использовать для связи.Вы никогда не сможете использовать асимметричное шифрование для функциональной связи. Хотя открытый ключ можно использовать для проверки цифровой подписи, он не может напрямую расшифровать что-либо, что зашифровано закрытым ключом, поэтому мы называем асимметричное шифрование «односторонним».

Но более серьезная проблема заключается в том, что размер ключа делает фактические функции шифрования и дешифрования дорогими с точки зрения ресурсов ЦП, которые они потребляют. Вот почему многие крупные организации и предприятия при масштабном развертывании SSL / TLS разгрузили рукопожатия: чтобы освободить ресурсы на своих серверах приложений.

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

Итак, когда вы видите, что кто-то ссылается на 2048-битный закрытый ключ, они, скорее всего, имеют в виду закрытый ключ RSA. Это асимметричный ключ. Он должен быть достаточно устойчивым к атакам, поскольку выполняет такую ​​важную функцию. Кроме того, обмен ключами - лучший вектор атаки для компрометации соединения.Гораздо проще украсть данные, использованные для создания симметричного сеансового ключа, и вычислить его самостоятельно, чем взламывать ключ грубой силой после того, как он уже используется.

Возникает вопрос: «Насколько надежно ИС 256-битное шифрование?» Если он менее надежен, чем 2048-битный ключ, достаточно ли его? И мы собираемся ответить на этот вопрос, но сначала нам нужно охватить немного больше, чтобы обеспечить правильный контекст.

Что такое «бит» безопасности?

Очень важно обсудить аспекты безопасности и сравнивая стойкость шифрования между алгоритмами, прежде чем мы фактически перейдем к любое практическое обсуждение того, насколько на самом деле надежна 256-битная защита.Потому что это не сравнение 1: 1.

Например, 128-битный ключ AES, который вдвое меньше рекомендованного размер, примерно эквивалентен 3072-битному ключу RSA с точки зрения фактического безопасность, которую они обеспечивают.

Также важно понимать разницу между требование безопасности и уровень безопасности.

  • Заявление о безопасности - Это уровень безопасности, для достижения которого изначально был разработан криптографический примитив - рассматриваемый шифр или хеш-функция.
  • Уровень безопасности - ФАКТИЧЕСКАЯ стойкость, которую обеспечивает криптографический примитив.

Обычно выражается в битах. Бит - это основная единица информации. На самом деле это набор «двоичных цифр», который одновременно невероятно эффективен и не так эффективен. Конечно, проще сказать немного. Но я просто потратил целый абзац, объясняя, что бит - это, по сути, 1 или 0 в двоичной системе, тогда как исходный термин описывал бы это двумя словами. Итак, вы решаете, эффективнее ли это.В любом случае, мы не собираемся тратить на двоичный код больше времени, чем у нас уже есть, но Росс написал об этом отличную статью несколько месяцев назад, и вам стоит ее прочитать.

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

Это может быть слишком абстрактно, поэтому вот небольшой пример: допустим, есть 2-битный ключ. Это означает, что у него будет 2 2 (4) значений.

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

Но прежде чем мы перейдем к математике, давайте вернемся к безопасности. претензия по сравнению с уровнем безопасности

Требование об обеспечении

и уровень защиты

Обычно, когда вы видите, что шифрование продается, вы видите рекламу требования безопасности. Вот каким будет уровень безопасности в оптимальных условиях. Мы собираемся сохранить это специфическим для SSL / TLS и PKI, но процент времени, в течение которого поддерживаются оптимальные условия, далек от 100%. Ошибки конфигурации являются обычным явлением, как и поддержка старых версий SSL / TLS и устаревших наборов шифров для обеспечения взаимодействия.

В контексте SSL / TLS, когда клиент попадает на веб-сайт, происходит рукопожатие, когда обе стороны определяют взаимно согласованный набор шифров для использования. Фактическая сила шифрования зависит от параметров, выбранных во время рукопожатия, а также от возможностей самого сервера и клиента.

Более пристальный взгляд на рукопожатие SSL / TLS

Во всем шифровании Патрик Ноэ

Когда вы подключаетесь к веб-сайту через HTTPS, под капотом происходит много всего.В первую очередь всем нужно… пожать руку ?!

Подробнее

Иногда 256-битное шифрование обеспечивает только уровень безопасности 128 бит. Это особенно характерно для алгоритмов хеширования, которые измеряют устойчивость к двум различным типам атак:

  • Коллизии - Если два разных фрагмента данных производят одно и то же значение хеш-функции, это называется коллизией и нарушает алгоритм.
  • Сопротивление PreImage - Степень устойчивости и алгоритм к эксплойту, когда злоумышленник пытается найти сообщение с определенным значением хеш-функции.

Так, например, SHA-256 имеет сопротивление столкновению 128 бит (n / 2), но сопротивление PreImage 256 бит. Очевидно, что хеширование отличается от шифрования, но есть также много общего, поэтому о нем стоит упомянуть.

Итак, насколько надежно 256-битное шифрование?

Опять же, это зависит от используемого вами алгоритма и варьируется от асимметричного до симметричного шифрования. Как мы уже говорили, это не сравнения 1: 1. На самом деле, уровень безопасности асимметричного шифрования на самом деле не так научен, как могло бы показаться, как должно быть.Асимметричное шифрование основано на математических задачах, которые легко решить в одном направлении (шифрование), но чрезвычайно сложно отменить (дешифрование). Из-за этого атаки на открытый ключ, асимметричные криптосистемы, как правило, намного быстрее, чем поиск пространства ключей методом грубой силы, который мешает закрытому ключу и схемам симметричного шифрования. Итак, когда вы говорите об уровне безопасности криптографии с открытым ключом, это не установленная цифра, а расчет вычислительной стойкости реализации против самой лучшей, наиболее известной в настоящее время атаки.

Симметричную стойкость шифрования немного проще рассчитывать исходя из характера атак, от которых они должны защищаться.

Итак, давайте посмотрим на AES или Advanced Encryption Standard, который обычно используется в качестве массового шифрования с SSL / TLS. Массовые шифры - это симметричные криптосистемы, которые фактически обеспечивают безопасность связи, происходящей во время зашифрованного HTTPS-соединения.

Исторически существует две разновидности: блочные шифры и потоковые шифры.

Блочные шифры разбивают все, что они зашифровывают, на блоки размером с ключ и шифруют их. Расшифровка включает в себя соединение блоков вместе. И если сообщение слишком короткое или слишком длинное, что бывает в большинстве случаев, их необходимо разбить и / или дополнить одноразовыми данными, чтобы сделать их подходящей длины. Атаки заполнения - одна из самых распространенных угроз для SSL / TLS.

TLS 1.3 отказался от этого стиля массового шифрования именно по этой причине: теперь все шифры должны быть переведены в потоковый режим.Потоковые шифры шифруют данные в псевдослучайных потоках любой длины, они считаются более простыми в развертывании и требуют меньше ресурсов. TLS 1.3 также покончил с некоторыми небезопасными потоковыми шифрами, такими как RC4.

Итак, короче говоря, на самом деле есть только два предложенных современные шифры, AES и ChaCha20. Мы собираемся сосредоточиться на AES прямо сейчас потому что ChaCha20 - другое животное.

TLS 1.2 Рекомендуемые шифры

  • TLS_ECDHE_ECDSA_WITH_ AES_256_GCM _SHA384
  • TLS_ECDHE_ECDSA_WITH_ AES_128_GCM _SHA256
  • TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 TLS_ECDHE_RSA_WITH_ AES_256_GCM _SHA384
  • TLS_ECDHE_RSA_WITH_ AES_128_GCM _SHA256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305

TLS 1.3 Рекомендуемые шифры

  • TLS_ AES_256_GCM _SHA384
  • TLS_CHACHA20_POLY1305_SHA256
  • TLS_ AES_128_GCM _SHA256
  • TLS_ _GCM _SHA256
  • TLS_ AES_25650
  • TLS_ AES_25650
  • TLS_ AES_25650 9000
  • TLS_ AES_25650 9000
  • TLS_ AES_25650_CC

    GCM означает режим счетчика Галуа, который позволяет AES, который на самом деле является блочным шифром, работать в потоковом режиме. CCM аналогичен, совмещая режим счетчика с функциями аутентификации сообщения.

    Как мы уже говорили, вы можете безопасно запустить AES в GCM или CCM со 128-битными ключами и все будет в порядке.Вы получаете эквивалент 3072-битного RSA с точки зрения уровня безопасности. Но обычно мы предлагаем использовать 256-битные ключи, чтобы обеспечить максимальную вычислительную надежность в течение длительного периода времени.

    Итак, давайте посмотрим на эти 256-битные ключи. 256-битный ключ может иметь 2 256 возможных комбинаций. Как мы упоминали ранее, двухбитовый ключ будет иметь четыре возможных комбинации (и может быть легко взломан двухбитным мошенник). Здесь мы имеем дело с возведением в степень, поэтому каждый раз, когда вы поднимаете exponent, n, вы резко увеличиваете количество возможных комбинаций.2 256 - это 2 x 2, x 2, x 2… 256 раз.

    Как мы уже говорили, лучший способ взломать ключ шифрования - это «грубая форсировка», которая, говоря простым языком, представляет собой просто метод проб и ошибок. Таким образом, если длина ключа составляет 256 бит, будет 2 256 возможных комбинаций, и хакер должен попробовать большинство из 2 256 возможных комбинаций, прежде чем прийти к выводу. Скорее всего, не нужно будет пытаться их всех угадать ключ - обычно это около 50% - но времени, которое потребуется, чтобы сделать это, уйдет далеко за пределы любой человеческой жизни.

    256-битный закрытый ключ будет иметь 115,792,089,237,316,195,423,570,985,008,687,907,853,269,
    984,665,640,564,039,457,584,007,913,129,639,936 (то есть 78 цифр) возможных комбинаций. Ни один суперкомпьютер на земле не сможет взломать это в разумные сроки.

    Даже если вы используете Tianhe-2 (MilkyWay-2), самый быстрый суперкомпьютер в мире, на взлом 256-битного шифрования AES уйдут миллионы лет.

    Эта цифра взлетает до небес, когда вы пытаетесь вычислить время, необходимое для разложения закрытого ключа RSA.Для расчета 2048-битного ключа RSA потребуется 6,4 квадриллиона лет (6 400 000 000 000 000 лет), согласно DigiCert.

    Ни у кого нет такого времени.

    Quantum Computing все изменит

    Сейчас было бы неплохо поговорить немного о квантовом шифровании и угрозе, которую оно представляет для наших современных криптографических примитивов. Как мы только что рассмотрели, компьютеры работают в двоичном формате. Комбинации 1 и 0. А на современных компьютерах биты работают так: они должны иметь известное значение: либо 1, либо 0.Период. Это означает, что современный компьютер может угадывать только один раз.

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

    Quantum Computers не будет иметь таких ограничений. Итак, две вещи: во-первых, квантовые вычисления все еще находятся в 7-10 годах от жизнеспособности, так что нам еще далеко. Некоторые центры сертификации, такие как DigiCert, начали размещать постквантовые цифровые сертификаты на устройствах Интернета вещей, которые будут иметь долгий срок службы, чтобы попытаться превентивно защитить их от квантовых вычислений, но в остальном мы все еще находимся на этапе исследований, когда дело доходит до квантовых вычислений. -устойчивое шифрование.

    Проблема в том, что квантовые компьютеры не используют биты, они используют квантовые биты или кубиты. Квантовый бит может быть как 1, так и 0 благодаря принципу, называемому суперпозицией, который немного сложнее, чем мы собираемся получить сегодня. Кубиты дают квантовым компьютерам возможность возвести в степень их атаки методом грубой силы, что эффективно сводит на нет вычислительную трудность, обеспечиваемую возведением в степень, которое имело место с криптографическим примитивом. Компьютер с четырьмя кубитами может эффективно находиться в четырех разных положениях (2 2 ) одновременно.Это снова 2 n , так что квантовый компьютер с n кубитами может попробовать 2 n комбинаций одновременно. Bristlecone, имеющий 72 кубита, может сразу попробовать 2 72 (4,722,366,482,869,645,213,696) значений.

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

    Тем не менее, внезапно 4.Шесть квадриллионов лет - не такой уж большой срок.

    Подведем итоги…

    256-битное шифрование является довольно стандартным в 2019 году, но каждый упоминание 256-битного шифрования не относится к тому же самому. Иногда 256-битное шифрование поднимается только до уровня безопасности 128 бит. Иногда размер ключа и уровень безопасности неразрывно связаны, в то время как в других случаях один просто используется для приближения к другому.

    Таким образом, ответ на вопрос «насколько надежно 256-битное шифрование» не дает однозначного ответа.По крайней мере, не все время.

    Однако в контексте SSL / TLS это чаще всего относится к Шифрование AES, где 256 бит действительно означают 256 бит. И, по крайней мере, для в настоящее время 256-битное шифрование по-прежнему достаточно надежно.

    К тому времени, когда злоумышленник с помощью современного компьютера сможет взломать 256-битный симметричный ключ, он не только будет отброшен, но и вероятно, заменили сертификат SSL / TLS, который тоже помог его сгенерировать.

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

    Как всегда, оставляйте комментарии или вопросы ниже…


    Изначально эта статья была написана Джеем Таккаром в 2017 году, а для 2019 года она была переписана Патриком Ноэ.

    Как зашифровать большие сообщения с помощью асимметричных ключей и phpseclib

    Из этого туториала Вы узнаете, как зашифровать произвольно большие сообщения с помощью асимметричных ключей и библиотеки PHP под названием phpseclib.


    Введение

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

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

    Основная проблема , которую необходимо решить с помощью любого алгоритма шифрования, - это распределение ключей. Как вы передаете ключи тем, кто в них нуждается, чтобы установить безопасную связь?

    Решение проблемы зависит от характера ключей и алгоритмов.

    Алгоритмы и ключи шифрования

    Существует два основных типа алгоритмов шифрования:
    1. Симметричные алгоритмы , которые используют один и тот же ключ как для шифрования, так и для дешифрования.
    2. Асимметричные алгоритмы , которые используют разные ключи для шифрования и дешифрования.

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

    Если выбран асимметричный алгоритм, есть два ключа: открытый ключ и закрытый ключ.Данные, зашифрованные с помощью открытого ключа, можно расшифровать только с помощью соответствующего закрытого ключа. Получатель сначала передает свой открытый ключ отправителю. Отправитель использует этот открытый ключ для шифрования сообщения, а затем передает сообщение получателю. Получатель расшифровывает сообщение своим закрытым ключом.

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

    Асимметричные алгоритмы решают проблему распределения ключей.

    Выбор алгоритмов шифрования

    Сильные криптографические алгоритмы основаны на продвинутой математике и теории чисел. Как правило, криптографический алгоритм является «сильным», если для данного размера ключа потребуется невероятно много времени для того, чтобы кто-то, не имеющий ключа, расшифровал сообщение.1

    Из-за сложности криптографических алгоритмов выбор одного из них может сбить с толку тех, кто не имеет большого опыта в математике.Таким образом, многие коммерческие и государственные организации полагаются на Национальный институт стандартов и технологий (NIST) - ненормативное агентство США - за рекомендациями по надежной криптографии.

    NIST определяет три асимметричных алгоритма: RSA, DSA и ECDSA. ECDSA - относительно новичок, поэтому два распространенных асимметричных алгоритма - это RSA и DSA. RSA часто является предпочтительным коммерческим алгоритмом, потому что стандарт легко допускает больший размер ключа. 2.

    В 2001 году NIST выбрал алгоритм Rijndael в качестве предпочтительного симметричного алгоритма, чтобы заменить устаревший DES (стандарт шифрования данных).3

    Проблема с ключами RSA

    Хотя асимметричные алгоритмы решают проблему распределения ключей, есть еще одна проблема. Природа алгоритма RSA такова, что он может зашифровать только ограниченное количество открытого текста. Например, если размер вашего ключа составляет 2048 бит, то вы ограничены 256 байтами (максимум) данных открытого текста, которые могут быть зашифрованы4.

    Вот краткое описание нашей проблемы:
    1. Асимметричными ключами легко безопасно обмениваться, но размер сообщения ограничен.
    2. Симметричные ключи имеют неограниченный размер сообщения, но их трудно безопасно обменивать.

    Решение

    Решение проблемы состоит в том, чтобы зашифровать сообщение симметричным ключом, затем асимметрично зашифровать ключ и прикрепить его к сообщению.

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

    В следующем разделе пошагово поясняются процессы шифрования и дешифрования.

    Шифрование

    1. Получатель генерирует пару ключей и передает свой открытый ключ отправителю.
    2. Отправитель генерирует случайный симметричный ключ и использует его для шифрования большого сообщения.
    3. Отправитель шифрует сообщение симметричным ключом.
    4. Отправитель шифрует симметричный ключ открытым ключом получателя.
    5. Отправитель объединяет зашифрованный симметричный ключ и зашифрованное сообщение.
    6. Отправитель передает зашифрованное сообщение получателю.

    Расшифровка

    После того, как получатель получит сообщение, он обратится к процессу:
    1. Получатель извлекает зашифрованный симметричный ключ из сообщения.
    2. Получатель расшифровывает симметричный ключ, используя свой закрытый ключ.
    3. Получатель расшифровывает сообщение симметричным ключом.

    Программирование решения на PHP

    Чтобы продемонстрировать эту технику, мы будем использовать библиотеку безопасных коммуникаций PHP .Эта библиотека (phpseclib) содержит бесплатные и открытые реализации на чистом PHP целых чисел произвольной точности, RSA, DES, 3DES, RC4, Rijndael, AES, SSH-1, SSH-2 и SFTP.

    Библиотека разработана таким образом, что она использует преимущества более быстрых функций шифрования (таких как open_ssl и mcrypt), если они доступны, для повышения производительности. Однако иногда эти библиотеки и функции недоступны для программистов PHP (например, в среде общего хостинга). Итак, phpseclib спроектирован так, чтобы работать надежно, хотя и медленнее, если доступен только PHP.

    Вы можете установить его через Composer.

    Документацию по phpseclib можно найти по адресу http://phpseclib.sourceforge.net/documentation/index.html

    Образец кода

    Давайте шаг за шагом напишем наш демонстрационный код.

    Создание открытых и закрытых ключей

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

      $ rsa = новый Crypt_RSA ();
    $ keys = $ rsa-> createKey (2048);
    
    file_put_contents ('key.pri', $ keys ['privatekey']);
    file_put_contents ('key.pub', $ keys ['publickey']);  

    Функция шифрования

    Функция encrypt_message принимает три параметра:
    1. $ plaintext - Текстовое сообщение для шифрования.
    2. $ asym_key - это открытый ключ, предоставленный отправителю получателем
    3. $ key_length - Это ключ произвольной длины, но он должен быть меньше 240. Чем больше число, тем меньше вероятность успеха атаки методом перебора. Это необязательный параметр.

      функция encrypt_message ($ plaintext, $ asym_key, $ key_length = 150)
    {
    
    $ rsa = новый Crypt_RSA ();
    $ rij = новый Crypt_Rijndael ();
    
    
    
    $ sym_key = crypt_random_string ($ key_length);
    
    
    $ rij-> setKey ($ sym_key);
    $ ciphertext = $ rij-> encrypt ($ plaintext);
    $ ciphertext = base64_encode ($ ciphertext);
    
    
    $ rsa-> loadKey ($ asym_key);
    $ sym_key = $ rsa-> encrypt ($ sym_key);
    
    
    $ sym_key = base64_encode ($ sym_key);
    $ len = strlen ($ sym_key);
    
    $ len = dechex ($ len);
    $ len = str_pad ($ len, 3, '0', STR_PAD_LEFT);
    
    
    $ message = $ len.$ sym_key. $ ciphertext;
    
    return $ message;
    }  

    Функция дешифрования

    Функция дешифрования принимает два параметра:
    1. $ message - сообщение для дешифрования
    2. $ asym_key - закрытый ключ получателя.

      функция decrypt_message ($ message, $ asym_key)
    {
    
    $ rsa = новый Crypt_RSA ();
    $ rij = новый Crypt_Rijndael ();
    
    
    $ len = substr ($ message, 0,3);
    $ len = hexdec ($ len);
    $ sym_key = substr ($ message, 0, $ len);
    
    
    $ message = substr ($ message, 3);
    $ ciphertext = substr ($ message, $ len);
    $ ciphertext = base64_decode ($ ciphertext);
    
    
    $ rsa-> loadKey ($ asym_key);
    $ sym_key = base64_decode ($ sym_key);
    $ sym_key = $ rsa-> расшифровать ($ sym_key);
    
    
    $ rij-> setKey ($ sym_key);
    $ plaintext = $ rij-> расшифровать ($ ciphertext);
    
    return $ plaintext;
    }  

    Заключение

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

    Библиотека защищенных коммуникаций PHP предоставляет удобные, чистые PHP-реализации симметричных и асимметричных стандартных алгоритмов. Это дает нам средства для создания гибридного решения на PHP.

    Исходный код этой статьи находится на github: https: // github.ru / sitepoint-editors / sitepointcrypto

    Сценарий оболочки

    - cut теперь имеет ограничение на длину строки?

    соответствует спецификации IEEE Std 1003.1-2008 ("POSIX.1")

    В этой спецификации cut (а также более новых) говорится:

    Входные файлы должны быть текстовыми файлами, за исключением того, что длина строки не должна быть неограниченной

    Следующее определяет текстовые файлы:

    Файл, содержащий символы, сгруппированные в ноль или более строк.Строки не содержат символов NUL, и ни одна из них не может превышать {LINE_MAX} байта в длину, включая символ <новая строка>. […]

    Около {LINE_MAX} :

    {LINE_MAX}
    Если не указано иное, максимальная длина в байтах строки ввода утилиты (стандартного ввода или другого файла), когда утилита описывается как обрабатывающая текстовые файлы. Длина включает место для завершающей строки .
    Минимальное допустимое значение: {_POSIX2_LINE_MAX}

    {_POSIX2_LINE_MAX}
    Если не указано иное, максимальная длина в байтах строки ввода утилиты (стандартный ввод или другой файл), когда утилита описывается как обрабатывающая текстовые файлы.Длина включает место для завершающей строки .
    значение: 2048

    Похоже, что cut не должен отказываться от работы со строками произвольной длины, но это не значит, что не должно быть никаких ограничений для -c или -b . Ограничение разрешено 1-2048 , которое вы наблюдали, скорее всего, связано с (предполагаемым) {LINE_MAX} или (фиксированным) {_POSIX2_LINE_MAX} (см. Этот комментарий).

    В общем случае {_POSIX2_LINE_MAX} должно быть безопасным значением. {LINE_MAX} может быть больше, но это как минимум {_POSIX2_LINE_MAX} , то есть 2048.

    Сравните один из примеров:

    Большинство утилит в этом томе POSIX.1-2008 работают с текстовыми файлами. Утилиту cut можно использовать для превращения файлов с произвольной длиной строки в набор текстовых файлов, содержащих одинаковые данные. Утилиту вставки можно использовать для создания (или воссоздания) файлов с произвольной длиной строки. Например, если файл содержит длинные строки:

      вырезать -b 1-500 -n файл> файл1
    вырезать -b 501- -n файл> файл2
      

    создает файл1 (текстовый файл) со строками не длиннее 500 байтов (плюс <новая строка>) и файл2 , который содержит остаток данных из файла.