Какое сообщение закодировано в кодировке windows 1251: Определите слово, которое закодировано в кодировке Windows-1251, а прочитано в КОИ-8.

Содержание

Определите слово, которое закодировано в кодировке Windows-1251, а прочитано в КОИ-8.

ограничьте количество одновременно выпускаемых пушкой снарядов не более трёх штук помогите пожалуйста это задача по программированию в python через Tk … inter. напишете программу пожалуйста.​

Из питона в С++! срочно до конца дня! и только на с++!! n, k = map(int, input().split()) *a, = map(int, input().split()) a.sort() left = 0 right = a[- … 1] — a[0] + 1 while left < right: mid = (left + right)//2 cows = 1 last = a[0] for cur in a[1:]: if cur — last > mid: cows += 1 last = cur if cows >= k: left = mid+1 else: right = mid print(left)

как рашифровается слово ТУРНЕ по информатике​

Строка с максимальной суммой элементов.Программирование c++ В заданном двумерном массиве целых чисел A требуется найти и вывести индекс строки, сумма … элементов которой максимальна. Input Со стандартного устройства ввода в первой строке вводятся 2 целых числа M и N — соответственно количество строк и столбцов двумерного массива A: 1<=M<=100, 1<=N<=100. В следующих M строках вводятся ровно по N элементов, являющихся элементами двумерного массива A. Все значения в массиве от -100 до 100. Output Требуется вывести индекс строки, сумма элементов которой максимальна. Выводить пробел в конце не нужно. Sample Input 3 3 1 2 3 4 5 6 7 8 9 Sample Output 2

Строка с максимальной суммой элементов.С++ В заданном двумерном массиве целых чисел A требуется найти и вывести индекс строки, сумма элементов которой … максимальна. Input Со стандартного устройства ввода в первой строке вводятся 2 целых числа M и N — соответственно количество строк и столбцов двумерного массива A: 1<=M<=100, 1<=N<=100. В следующих M строках вводятся ровно по N элементов, являющихся элементами двумерного массива A. Все значения в массиве от -100 до 100. Output Требуется вывести индекс строки, сумма элементов которой максимальна. Выводить пробел в конце не нужно. Sample Input 3 3 1 2 3 4 5 6 7 8 9 Sample Output 2

C++!! Левый и правый двоичный поискДано два списка чисел, числа в первом списке упорядочены по неубыванию. Для каждого числа из второго списка определ … ите номер первого и последнего появления этого числа в первом списке. В данной задаче можно пользоваться встроенными функциями.Входные данныеВ первой строке входных данных записаны два числа N и M (1≤N,M≤20000). Во второй строке записаны N упорядоченных по неубыванию целых чисел — элементы первого списка. В третьей строке записаны M целых неотрицательных чисел — элементы второго списка. Все числа в списках — целые 32-битные знаковые.Выходные данныеПрограмма должна вывести M строчек. Для каждого числа из второго списка нужно вывести номер его первого и последнего вхождения в первый список. Нумерация начинается с единицы. Если число не входит в первый список, нужно вывести одно число 0.ПримерыВвод10 51 1 3 3 5 7 9 18 18 5757 3 9 1 17910 10Вывод3 47 71 20Можно этот код переделать в С++!s1 = input()s2 = input()s3 = input()A = set(map(int, s2.split()))B = list(map(int, s3.split()))for b in B:~~~~if b in A:~~~~~~~~print(‘YES’)~~~~else:~~~~~~~~print(‘NO’)Только чтоб работал!

C++!! Upper boundНа вход подаются N целых чисел, а также набор из M запросов, каждый из которых — целое число.9.Выходные данныеВыведите единственную строку с M целыми числами — количествами чисел исходного массива, меньших либо равных соответствующему запросу.ПримерыВвод51 5 3 2 124 3Вывод4 4ОграниченияВремя выполнения: 3 секунды

30 балов! Срочно! =============================== #pgzero WIDTH = 300 # Ширина окна HEIGHT = 300 # Высота окна TITLE = «Призрак в замке» # Заголовок о … кна игры FPS = 30 # Количество кадров в секунду # Объекты ghost = Actor(‘ghost’, (150, 150)) fon = Actor(«bg») def draw(): fon.draw() ghost.draw() ======================================================== Создайте еще одну собственную мини-игру! Напишите код управления приведением в замке по стрелкам: влево, вправо, вверх, вниз. А для того, чтобы получилось еще интереснее напишите код изменения скина при нажатии на пробел — эту проверку лучше прописать в функции on_key_down(key): если кнопка нажата и сейчас скин ghost, то он меняется на ghost1, иначе, если нажат пробел и сейчас скин ghost1, то он меняется на ghost. Не забудьте написать проверку на то, что призрак не уйдет за границы окна игры!

ПОМОГИТЕ, ПОЖАЛУЙСТААА!!!!вот ввожу и никак не могу получить ответ, ЧТО БДУЕТ ВЫВВЕДЕНО НА ЭКРАН ПОСЛЕ ЭТОЙ ПРОГРАММЫ. у пеня выходит ошибка, ответ не … принимает

СРОЧНО 30 Б . Как можно использовать стили для создания структуры документа?

Урок 14. кодирование текстовой информации — Информатика — 10 класс

Информатика, 10 класс. Урок № 14.

Тема — Кодирование текстовой информации

Цели и задачи урока:

— познакомиться со способами кодирования и декодирования текстовой информации с помощью кодовых таблиц и компьютера;

— познакомиться со способом определения информационного объема текстового сообщения;

— познакомиться с алгоритмом Хаффмана.

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

Формула Хартли определяет количество информации в зависимости от количества возможных вариантов:

N=2i, где

N — это количество вариантов,

i — это количество бит, не обходимых для кодирования.

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

N=2i, где N — кол-во возможных вариантов

i — кол-во бит, потребуемых для кодирования

Итак, если в нашем алфавите будет присутствовать только 32 символа, то каждый из них займет только 5 бит.

И тогда каждому символу мы дадим уникальный двоичный код. Такую таблицу мы будем назвать кодировочной.

Первая широко используемая кодировочная таблица была создана в США и называлась ASCII, что в переводе означало American standard code for information interchange. Как вы видите, в таблице присутствуют не только латинские буквы, но и цифры, и даже действия. Каждому символу отводится 7 бит, а значит, всего было закодировано 128 символов.

Но так как этого количества было недостаточно, стали создаваться другие таблицы, в которых можно было закодировать и другие символы. Например, таблица Windows-1251, которая, по сути, являлась изменением таблицы ASCII, в которую добавили буквы кириллицы. Таких таблиц было создано множество: MS-DOS, КОИ-8, ISO, Mac и другие:

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

Поэтому была разработана международная таблица кодировки Unicode, включающая в себя как символы английского, русского, немецкого, арабского и других языков. На каждый символ в такой таблице отводится 16 бит, то есть она позволяет кодировать 65536 символов. Однако использование такой таблицы сильно «утяжеляет» текст. Поэтому существуют различные алгоритмы неравномерной кодировки текста, например, алгоритм Хаффмана.

АЛГОРИТМ ХАФФМАНА

Идея алгоритма Хаффмана основана на частоте появления символа в последовательности. Символ, который встречается в последовательности чаще всего, получает новый очень маленький код, а символ, который встречается реже всего, получает, наоборот, очень длинный код.

Пусть нам дано сообщение aaabcbeeffaabfffedbac.

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

Шаг 1.

Подсчитайте и внесите в таблицу частоту появления каждого символа в сообщении:

У вас должно получиться:

Шаг 2.

Расположите буквы в порядке возрастания их частоты.

Шаг 3.

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

Символы d и c превращаются в ветку дерева:

Шаг 4.

Проделываем эти шаги до тех пор, пока не получится дерево, содержащее все символы.

Итак, сортируем таблицу:

Шаг 5.

Объединяем символ e и символ cd в ветку дерева:

d

C

Шаг 6.

Сортируем:

Шаг 7.

Шаг 8.

Сортируем:

Шаг 9.

Шаг 10.

Сортируем:

Шаг 11.

Шаг 12.

Получился префиксный код. Теперь осталось расставить 1 и 0. Пусть каждая правая ветвь обозначает 1, а левая — 0.

Шаг 13.

Составляем код буквы, идя по ветке дерева от буквы к основанию дерева.

Тогда код для каждой буквы будет:

Задание №1

Закодируйте ASCII кодом слово MOSCOW.

Решение:

Составим таблицу и поместим туда слово MOSCOW. Используя таблицу ASCII кодов, закодируем все буквы слова:

M

O

S

C

O

W

1001101

1001111

1010011

1000011

1001111

1110111

ОТВЕТ: 100110110011111010011100001110011111110111

Задание №2

Используя табличный код Windows1251, закодируйте слово КОМПЬЮТЕР.

Решение:

К

О

М

П

Ь

Ю

Т

Е

Р

234

206

204

239

252

254

242

197

208

Ответ: 234206204239252254242197208

Задание №3

Используя алгоритма Хаффмана, закодируйте сообщение: Россия

Решение:

Давайте все левые ветви обозначим «1», а правые – «0»

Таким образом: С — 0, Р — 101, О — 100, И — 111, Я — 110

ОТВЕТ: 10110000111110

Двоичное кодирование текстовой информации — презентация онлайн

1. Д В О И Ч Н О Е К О Д И Р О В А Н И Е Т Е К С Т О В О Й И Н Ф О Р М А Ц И И

2. Ч т о т а к о е т е к с т ?

Первые компьютеры были созданы для обработки
числовой информации, но начиная с 60-х годов XX века,
появилась
возможность
обработки
и
текстовой
(символьной) информации.
Компьютерный текст – любая последовательность
символов из компьютерного алфавита. Текст может быть на
естественном языке (например, русском или английском),
может содержать химические или математические
формулы, таблицы и пр. Главное, чтобы все символы,
используемые в тексте, входили в компьютерный алфавит.
Алфавит должен включать латинские и русские
прописные и строчные буквы, цифры, знаки препинания и
арифметических операций, специальные знаки.
Для представления текста
в компьютерном алфавите используется
256 символов

3. В с п о м н и м …

Любая информация представляется в памяти компьютера в
двоичном виде.
Для компьютерной обработки текста необходимо
кодирование – преобразование входной информации
(каждого символа текста) в форму, воспринимаемую
компьютером, т.е. двоичный код.
Чтобы вывести текст из памяти на экран или печать, нужно
декодирование — преобразование двоичных кодов в символы.
Алфавит – множество символов для записи текста.
Мощность алфавита (N) – количество символов в алфавите.
Определить информационный вес символа (i), т. е.
количество бит для представления одного символа из
алфавита указанной мощности, можно по формуле Хартли:
N = 2I (256 = 28 i = 8 бит = 1 байт).
Для кодирования одного символа
в алфавите мощностью 256 символов требуется
8 бит или 1 байт информации.

4. Что такое т а б л и ц а к о д и р о в к и ?

Что такое
т а б л и ц а
в к и ?
к о д и р о
Чтобы поставить в соответствие каждому символу числовой код
нужна таблица кодировки – стандарт, в котором всем символам
компьютерного алфавита поставлены в соответствие порядковые
номера в двоичной системе счисления.
Международным стандартом является таблица кодировки ASCII
Для кодировки русских букев существует пять различных кодовых
таблиц : КОИ-8, СЗ1251, СР866, Mac, ISO
В последнее время появился новый международный стандарт
UNICODE, в котором для представления символа отводится 2 байта.

5. С т а н д а р т A S C I I

В 1967 году в США был введен код ASCII (Аmerican Standart
Code for Information Interchange — Американский Стандартный
Код для Обмена Информацией). В нем каждому символу
ставился в соответствие 7-битный двоичный код, всего 128
символов (кодов), из них:
Управляющие (коды от 0 до 31, а также 127), не
отображаются на экране;
Отображаемые (коды от 32 до 126). Код 32 – пробел,
отображает пропуск на экране. Далее следуют знаки
препинания, скобки, арабские цифры (0 — 9), некоторые знаки,
латинские прописные, затем строчные буквы, знаки.
После модификации в 1977 году стандартом был принят 1
байт, и каждому символу в ASCII поставлено число от 00000000
до 11111111 (0 — 255 в десятичной системе счисления).
Коды 0 -127 — являются международным стандартом,
128 – 255 используются для национальных алфавитов и
специальных знаков (расширенная таблица).

6. К о д и р о в к а к и р и л л и ц ы

Стандарт CP866, альтернативная кодировка — кодовая
страница, где все специфические европейские символы в верхней
половине кодовой таблицы были заменены на кириллицу.
Популярен в среде MS-DOS и OS/2. Разработана в ВЦ АН СССР,
для которого впервые в СССР была закуплена партия IBM PC.
Стандарт CP1251. Кодовая страница Microsoft CP1251 создана
Microsoft как стандарт для кодировки кириллицы в Windows.
Стандарт КОИ8. В нем символы русской кириллицы поместили
так, что позиции символов кириллицы соответствуют их
фонетическим аналогам в английском алфавите. Это означает,
что если в тексте, написанном в КОИ8, убрать восьмой бит
каждого символа, то мы имеем «читабельный» текст, хотя он и
написан английскими символами. KOI8-R быстро стал фактически
стандартом для русской кириллицы в Internet

7. К о д и р о в к а A S C I I (коды 0 – 127)

К о д и р о в к а A S C I I
– 127)
(коды 0

8. К о д и р о в к а Windows-1251 (CP1251)

9. С т а н д а р т K O I 8 — R

10. С т а н д а р т C P 8 6 6

11. Сортировка текста по алфавиту

В
таблицах
кодировки
соблюдается
принцип
последовательного кодирования (лексикографический): в
начале упорядочены цифры (от 0 до 9), затем приводится
латинский алфавит: прописные (большие), затем — строчные
(маленькие) буквы, во второй части таблицы дается кириллица
(русский алфавит), также сначала прописные, затем строчные
буквы. Этот принцип позволяет сортировать символьную
информацию.
Пример
Изучите в приведенных кодировках размещение символов.
Попробуйте определить: в
каком порядке будут идти
фрагменты текста «excel», «байт», «8в», «10г», «9а», «10а», если
упорядочить их по возрастанию?
Ответ: «10а», «10г», «8в», «9а», «excel», «байт»
Почему? Сначала будут упорядочены по возрастанию коды первых символов,
затем, затем среди одинаковых первых символов, будут упорядочены вторые и
т. д.

12. Информационный объем текста

Статьи, рефераты, дипломы и прочие документы,
подготавливают на компьютере в текстовых редакторах. Обычно
известно, какая кодировка используется программой. Все это
позволяет определить информационный объем документа.
Пример
Пусть реферат содержит 32 страницы; на каждой странице —
32 строки, в каждой строке — 64 символа. Определить
информационный объем реферата в кодировке ASCII .
Одна страница содержит 32 x 64 = 25 x 26 = 211 символов. Тогда в
всем реферате: 32 x 211 = 25 x 211 = 216 символов. В кодировке ASCII
для хранения символа требуется один байт. Объем реферата: 216
х 1 = 216 байт = 216/ 210 = 26 Кбайт = 64 Кбайта

13. Р е ша е м з а д а ч и с а м и …

Р е ша е м
1.
з а д а ч и
с а м и …
Оцените информационный объем сообщения в битах и байтах,
представленного в кодировке ASCII:
2.
В одном килограмме 1000 граммов
3.
Какое сообщение закодировано в кодировке Windows-1251:
0011010100100000111000011110000011101011111010111110111011100010
4.
Считая, что каждый символ кодируется двумя байтами, оцените
информационный объем следующего предложения из пушкинского
четверостишия:
Певец-Давид был ростом мал, Но повалил же Голиафа!
5.
Выбрать слово, имеющее наибольшую сумму кодов символов в таблице
кодировки ASCII.
6.
А. окно; B. кино; C. ника; D. конь; E. ночь.
7.
Выбрать слово, имеющее наибольшую сумму кодов символов в таблице
кодировки ASCII.
8.
А. 2b2d; B. файл; C. file; D. 1999; E. 2001.
11.
Декодируйте следующее сообщение, записанное восьмибитовой кодировке:
01010101 01110000 00100000 00100110 00100000
01000100 01101111 01110111 01101110
11.
Определите вид кодировки и декодируйте следующие сообщения:
а) 235 207 212 197 204 216 206 201 203 207 215
б) 213 224 244 244 236 224 237

14. О т в е т ь т е н а в о п р о с ы …

О т в е т ь т е
1.
2.
3.
4.
5.
6.
7.
8.
н а

в о п р о с ы
Что такое компьютерный текст?
Что такое кодирование?
Что такое алфавит? мощность алфавита?
Что такое таблица кодировки?
В чем суть принципа последовательного кодирования?
Какие вам известны таблицы кодировки?
Какие Вам известны таблицы кодировок?
Как определить информационный объем текста.?

Как работают кодировки текста. Откуда появляются «кракозябры». Принципы кодирования. Обобщение и детальный разбор

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

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

О чем будет под катом: принцип работы одно байтовых кодировок (ASCII, Windows-1251 и т.д.), предпосылки появления Unicode, что такое Unicode, Unicode-кодировки UTF-8, UTF-16, их отличия, принципиальные особенности, совместимость и несовместимость разных кодировок, принципы кодирования символов, практический разбор кодирования и декодирования.

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

Предпосылки Unicode

Начать думаю стоит с того времени когда компьютеризация еще не была так сильно развита и только набирала обороты. Тогда разработчики и стандартизаторы еще не думали, что компьютеры и интернет наберут такую огромную популярность и распространенность. Собственно тогда то и возникла потребность в кодировке текста. В каком то же виде нужно было хранить буквы в компьютере, а он (компьютер) только единицы и нули понимает. Так была разработана одно-байтовая кодировка ASCII (скорее всего она не первая кодировка, но она наиболее распространенная и показательная, по этому ее будем считать за эталонную). Что она из себя представляет? Каждый символ в этой кодировке закодирован 8-ю битами. Несложно посчитать что исходя из этого кодировка может содержать 256 символов (восемь бит, нулей или единиц 2

8

=256).

Первые 7 бит (128 символов 27=128) в этой кодировке были отданы под символы латинского алфавита, управляющие символы (такие как переносы строк, табуляция и т.д.) и грамматические символы. Остальные отводились под национальные языки. То есть получилось что первые 128 символов всегда одинаковые, а если хочешь закодировать свой родной язык пожалуйста, используй оставшуюся емкость. Собственно так и появился огромный зоопарк национальных кодировок. И теперь сами можете представить, вот например я находясь в России беру и создаю текстовый документ, у меня по умолчанию он создается в кодировке Windows-1251 (русская кодировка использующаяся в ОС Windows) и отсылаю его кому то, например в США. Даже то что мой собеседник знает русский язык, ему не поможет, потому что открыв мой документ на своем компьютере (в редакторе с дефолтной кодировкой той же самой ASCII) он увидит не русские буквы, а кракозябры. Если быть точнее, то те места в документе которые я напишу на английском отобразятся без проблем, потому что первые 128 символов кодировок Windows-1251 и ASCII одинаковые, но вот там где я написал русский текст, если он в своем редакторе не укажет правильную кодировку будут в виде кракозябр.

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

Небольшой практикум ASCII

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

Вот таблица символов ASCII:

Тут имеем 3 колонки:

  • номер символа в десятичном формате
  • номер символа в шестнадцатиричном формате
  • представление самого символа.

Итак, закодируем строку «ok» (англ.) в кодировке ASCII. Символ «o» (англ.) имеет позицию 111 в десятичном виде и

6F

в шестнадцатиричном. Переведем это в двоичную систему —

01101111

. Символ «k» (англ.) — позиция 107 в десятеричной и

6B

в шестнадцатиричной, переводим в двоичную —

01101011

. Итого строка «ok» закодированная в ASCII будет выглядеть так —

01101111 01101011

. Процесс декодирования будет обратный. Берем по 8 бит, переводим их в 10-ичную кодировку, получаем номер символа, смотрим по таблице что это за символ.

Unicode

С предпосылками создания общей таблицы для всех в мире символов, разобрались. Теперь собственно, к самой таблице. Unicode — именно эта таблица и есть (это не кодировка, а именно таблица символов). Она состоит из 1 114 112 позиций. Большинство этих позиций пока не заполнены символами, так что вряд ли понадобится это пространство расширять.

Разделено это общее пространство на 17 блоков, по 65 536 символов в каждом. Каждый блок содержит свою группу символов. Нулевой блок — базовый, там собраны наиболее употребляемые символы всех современных алфавитов. Во втором блоке находятся символы вымерших языков. Есть два блока отведенные под частное использование. Большинство блоков пока не заполнены.

Итого емкость символов юникода составляет от 0 до 10FFFF (в шестнадцатиричном виде).

Записываются символы в шестнадцатиричном виде с приставкой «U+». Например первый базовый блок включает в себя символы от U+0000 до U+FFFF (от 0 до 65 535), а последний семнадцатый блок от U+100000 до U+10FFFF (от 1 048 576 до 1 114 111).

Отлично теперь вместо зоопарка национальных кодировок, у нас есть всеобъемлющая таблица, в которой зашифрованы все символы которые нам могут пригодиться. Но тут тоже есть свои недостатки. Если раньше каждый символ был закодирован одним байтом, то теперь он может быть закодирован разным количеством байтов. Например для кодирования всех символов английского алфавита по прежнему достаточно одного байта например тот же символ «o» (англ.) имеет в юникоде номер U+006F, то есть тот же самый номер как и в ASCII — 6F в шестнадцатиричной и 111 в десятеричной. А вот для кодирования символа «U+103D5» (это древнеперсидская цифра сто) — 103D5 в шестнадцатиричной и 66 517 в десятеричной, тут нам потребуется уже три байта.

Решить эту проблему уже должны юникод-кодировки, такие как UTF-8 и UTF-16. Далее речь пойдет про них.

UTF-8

UTF-8 является юникод-кодировкой переменной длинны, с помощью которой можно представить любой символ юникода.

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

Немного отступлю от темы, надо написать про совместимость ASCII и UTF

То что латинские символы и основные управляющие конструкции, такие как переносы строк, табуляции и т.д. закодированы одним байтом делает utf-кодировки совместимыми с кодировками ASCII. То есть фактически латиница и управляющие конструкции находятся на тех же самых местах как в ASCII, так и в UTF, и то что закодированы они и там и там одним байтом и обеспечивает эту совместимость.

Давайте возьмем символ «o»(англ.) из примера про ASCII выше. Помним что в таблице ASCII символов он находится на 111 позиции, в битовом виде это будет 01101111. В таблице юникода этот символ — U+006F что в битовом виде тоже будет 01101111. И теперь так, как UTF — это кодировка переменной длины, то в ней этот символ будет закодирован одним байтом. То есть представление данного символа в обеих кодировках будет одинаково. И так для всего диапазона символов от 0 до 128. То есть если ваш документ состоит из английского текста то вы не заметите разницы если откроете его и в кодировке UTF-8 и UTF-16 и ASCII (прим. в UTF-16 такие символы все равно будут закодированы двумя байтами, по этому вы не увидите разницы, если ваш редактор будет игнорировать нулевые байты), и так до момента пока вы не начнете работать с национальным алфавитом.

Сравним на практике как будет выглядеть фраза «Hello мир» в трех разных кодировках: Windows-1251 (русская кодировка), ISO-8859-1 (кодировка западно-европейских языков), UTF-8 (юникод-кодировка). Суть данного примера состоит в том что фраза написана на двух языках. Посмотрим как она будет выглядеть в разных кодировках.


В кодировке ISO-8859-1 нет таких символов «м», «и» и «р».

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

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

01001000 01100101 01101100 01101100 01101111 00100000 11101100 11101000 11110000
Отлично, вот это и есть фраза «Hello мир» в кодировке Windows-1251.

Теперь представим что вы имеете файл с текстом, но не знаете в какой кодировке этот текст. Вы предполагаете что он в кодировке ISO-8859-1 и открываете его в своем редакторе в этой кодировке. Как сказано выше с частью символов все в порядке, они есть в этой кодировке, и даже находятся на тех же местах, но вот с символами из слова «мир» все сложнее. Этих символов в этой кодировке нет, а на их местах в кодировке ISO-8859-1 находятся совершенно другие символы. А конкретно «м» — позиция 236, «и» — 232. «р» — 240. И на этих позициях в кодировке ISO-8859-1 находятся следующие символы позиция 236 — символ «ì», 232 — «è», 240 — «ð»

Значит фраза «Hello мир» закодированная в Windows-1251 и открытая в кодировке ISO-8859-1 будет выглядеть так: «Hello ìèð». Вот и получается что эти две кодировки совместимы лишь частично, и корректно перекодировать строку из одной кодировке в другую не получится, потому что там просто напросто нет таких символов.

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

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

01001000 — первый бит ноль, значит 1 байт кодирует 1 символ -> «H»

01100101 — первый бит ноль, значит 1 байт кодирует 1 символ -> «e»

Если первый бит не нулевой то символ кодируется несколькими байтами.

Для двухбайтовых символов первые три бита должны быть такие — 110

11010000 10111100 — в начале 110, значит 2 байта кодируют 1 символ. Второй байт в таком случае всегда начинается с 10. Итого отбрасываем управляющие биты (начальные, которые выделены красным и зеленым) и берем все оставшиеся (10000111100), переводим их в шестнадцатиричный вид (043С) -> U+043C в юникоде равно символ «м».

для трех-байтовых символов в первом байте ведущие биты — 1110

11101000 10000111 101010101 — суммируем все кроме управляющих битов и получаем что в 16-ричной равно 103В5, U+103D5 — древнеперситдская цифра сто (10000001111010101)

для четырех-байтовых символов в первом байте ведущие биты — 11110

11110100 10001111 10111111 10111111 — U+10FFFF это последний допустимый символ в таблице юникода (100001111111111111111)

Теперь, при желании, можем записать нашу фразу в кодировке UTF-8.

UTF-16

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

Начнем с символов которые кодируются одной кодовой парой. Легко посчитать что таких символов может быть 65 535 (2в16), что полностью совпадает с базовым блоком юникода. Все символы находящиеся в этом блоке юникода в кодировке UTF-16 будут закодированы одной кодовой парой (двумя байтами), тут все просто.

символ «o» (латиница) — 00000000 01101111
символ «M» (кириллица) — 00000100 00011100

Теперь рассмотрим символы за пределами базового юникод диапазона. Для их кодирования потребуется уже две кодовые пары (4 байта). И механизм их кодирования немного сложнее, давайте по порядку.

Для начала введем понятия суррогатной пары. Суррогатная пара — это две кодовые пары используемые для кодирования одного символа (итого 4 байта). Для таких суррогатных пар в таблице юникода отведен специальный диапазон от D800 до DFFF. Это значит, что при преобразовании кодовой пары из байтового вида в шестнадцатиричный вы получаете число из этого диапазона, то перед вами не самостоятельный символ, а суррогатная пара.

Чтобы закодировать символ из диапазона 1000010FFFF (то есть символ для которого нужно использовать более одной кодовой пары) нужно:

  1. из кода символа вычесть 10000(шестнадцатиричное) (это наименьшее число из диапазона 1000010FFFF)
  2. в результате первого пункта будет получено число не больше FFFFF, занимающее до 20 бит
  3. ведущие 10 бит из полученного числа суммируются с D800 (начало диапазона суррогатных пар в юникоде)
  4. следующие 10 бит суммируются с DC00 (тоже число из диапазона суррогатных пар)
  5. после этого получатся 2 суррогатные пары по 16 бит, первые 6 бит в каждой такой паре отвечают за определение того что это суррогат,
  6. десятый бит в каждом суррогате отвечает за его порядок если это 1 то это первый суррогат, если 0, то второй

Разберем это на практике, думаю станет понятнее.

Для примера зашифруем символ, а потом расшифруем. Возьмем древнеперсидскую цифру сто (U+103D5):

  1. 103D510000 = 3D5
  2. 3D5 = 0000000000 1111010101 (ведущие 10 бит получились нулевые приведем это к шестнадцатиричному числу, получим 0 (первые десять), 3D5 (вторые десять))
  3. 0 + D800 = D800 (1101100000000000) первые 6 бит определяют что число из диапазона суррогатных пар десятый бит (справа) нулевой, значит это первый суррогат
  4. 3D5 + DC00 = DFD5 (1101111111010101) первые 6 бит определяют что число из диапазона суррогатных пар десятый бит (справа) единица, значит это второй суррогат
  5. итого данный символ в UTF-16 — 1101100000000000 1101111111010101

Теперь наоборот раскодируем. Допустим что у нас есть вот такой код — 1101100000100010 1101111010001000:

  1. переведем в шестнадцатиричный вид = D822 DE88 (оба значения из диапазона суррогатных пар, значит перед нами суррогатная пара)
  2. 1101100000100010 — десятый бит (справа) нулевой, значит первый суррогат
  3. 1101111010001000 — десятый бит (справа) единица, значит второй суррогат
  4. отбрасываем по 6 бит отвечающих за определение суррогата, получим 0000100010 1010001000 (8A88)
  5. прибавляем 10000 (меньшее число суррогатного диапазона) 8A88 + 10000 = 18A88
  6. смотрим в таблице юникода символ U+18A88 = Tangut Component-649. Компоненты тангутского письма.

Спасибо тем кто смог дочитать до конца, надеюсь было полезно и не очень занудно.

Вот некоторые интересные ссылки по данной теме:
habr.com/ru/post/158895 — полезные общие сведения по кодировкам
habr.com/ru/post/312642 — про юникод
unicode-table.com/ru — сама таблица юникод символов

Ну и собственно куда же без нее
ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4 — юникод
ru.wikipedia.org/wiki/ASCII — ASCII
ru.wikipedia.org/wiki/UTF-8 — UTF-8
ru.wikipedia.org/wiki/UTF-16 — UTF-16

Задачи и задания — Кодирование текста

  1. Закодируйте десятичным, шестнадцатеричным и двоичным кодом слово «Flash» Определите объем памяти, необходимой для хранения этого двоичного кода.
  2. Декодируйте следующие сообщения, зная, что каждый символ в них представлен 3-разрядным десятичным кодом: 1) 087 111 114 100; 2) 068 079 083.
  3. Декодируйте сообщение, зная, что каждый символ в нем представлен 8-разрядным двоичным кодом: []
  4. Расшифруйте сообщение, зная, что каждый символ в нем представлен 2-разрядным шестнадцатеричным кодом: 57 69 6E 64 6F 77 73 2D 39 35.
  5. Используя кодировку Windows-1251, закодируйте десятичным, шестнадцатеричным и двоичным кодом слово «Код». Определите объем памяти, необходимый для хранения полученного двоичного кода.
  6. С помощью таблицы кодировки КОИ-8 представьте слово «Информатика» десятичным, шестнадцатеричным и двоичным кодом. Определите объем памяти, необходимой для хранения этого слова.
  7. Какое предложение закодировано с помощью кодировки Windows-1251, если это же предложение, закодированное с помощью кодировки КОИ-8, выглядит как «ЧАЮЪ ХМТНПЛЮЖХЪ ЛНФЕР АШРЭ ОПЕДЯРЮБКЕМЮ Я ОНЛНЫЭЧ ДБНХВМНЦН ЙНДЮ»? Определите объем памяти, необходимой для хранения этого предложения.
  8. Текстовый файл содержит 300 страниц, на каждой из которых размещено по 50 строк текста, состоящих из 60 символов. Можно ли записать этот файл на одну дискету объемом 1,44 Мбайта, если символы текста закодированы для хранения с помощью кодировки ASCII?
  9. Определите примерную информационную емкость одной страницы этого учебника, всего учебника. Сколько таких учебников поместится на дискете емкостью 1,44 Мбайт, на CD-диске емкостю 700 Мбайт и емкостью 4,7 Гбайт, если символы текста закодированы для хранения с помощью кодировки Unicode?
  10. Во сколько раз увеличится информационный объем страницы текста при его преобразовании из кодировки ASCII в кодировку Unicode?
  11. Определите объем памяти, необходимой для хранения сообщения «Информатика — это фундаментальная наука! Информатика изучает информационные процессы». Наберите это сообщение с помощью текстового редактора, установленного на компьютере, и сохраните это сообщение в виде текстового файла text1.txt. Определите размер полученного файла и сравните с вычисленным ранее объемом памяти, необходимой для хранения набранного сообщения.
  12. Добавьте еще одно предложение в сообщение, набранное на компьютере при выполнении предыдущего задания. Сохраните это сообщение в виде текстового файла text2.txt. Определите размер этого файла. Сравните объемы файлов text1.txt и text2.txt. Объясните полученный результат.

Онлайн калькулятор: Кодировка файла

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

Скачать текст как файл с выбором кодировки
КодировкаAtari STCP 856 HebrewDOS Arabic (CP864)DOS Baltic Rim (CP775)DOS Cyrillic (CP855)DOS Cyrillic Russian (CP866)DOS French Canada (CP863)DOS Greek (CP737)DOS Greek 2 (CP869)DOS Hebrew (CP862)DOS Icelandic (CP861)DOS Latin 1 (CP850)DOS Latin 2 (CP852)DOS Latin US (CP437)DOS Nordic (CP865)DOS Portuguese (CP860)DOS Turkish (CP857)EBCDIC 037 USA/CanadaEBCDIC 1026 TurkishEBCDIC 424 HebrewEBCDIC 500 InternationalEBCDIC 875 GreekGSM 03.38ISO 8-bit Urdu (IBM CP1006)ISO 8859-2 (Latin-2)ISO 8859-5ISO 8859-6ISO 8859-7ISO-IR-68ISO/IEC 8859-1 (Latin-1)ISO/IEC 8859-10 (Latin-6)ISO/IEC 8859-11 ISO/IEC 8859-13 (Latin-7)ISO/IEC 8859-14ISO/IEC 8859-15 (Latin-9)ISO/IEC 8859-16 (Latin-10)ISO/IEC 8859-3ISO/IEC 8859-4 (Latin-4)ISO/IEC 8859-8ISO/IEC 8859-9KOI8-RKOI8-UKPS 9566KZ-1048 Mac OS CelticMac OS Central EuropeanMac OS CroatianMac OS CyrillicMac OS DingbatsMac OS GaelicMac OS GreekMac OS IcelandicMac OS InuitMac OS RomanMac OS RomanianMac OS TurkishUTF-8Windows-1250Windows-1251Windows-1252Windows-1253Windows-1254Windows-1255Windows-1256Windows-1257Windows-1258Windows-874Windows-932Windows-936Windows-949Windows-950Чу, я слышу пушек гром!

Входной текст

Шестнадцатеричный дамп

 

content_copy Ссылка save Сохранить extension Виджет

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

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

В какой кодировке можно представить текст?
Чу, я слышу пушек гром!

Входной текст

КодировкаAtari STCP 856 HebrewDOS Arabic (CP864)DOS Baltic Rim (CP775)DOS Cyrillic (CP855)DOS Cyrillic Russian (CP866)DOS French Canada (CP863)DOS Greek (CP737)DOS Greek 2 (CP869)DOS Hebrew (CP862)DOS Icelandic (CP861)DOS Latin 1 (CP850)DOS Latin 2 (CP852)DOS Latin US (CP437)DOS Nordic (CP865)DOS Portuguese (CP860)DOS Turkish (CP857)EBCDIC 037 USA/CanadaEBCDIC 1026 TurkishEBCDIC 424 HebrewEBCDIC 500 InternationalEBCDIC 875 GreekGSM 03.38ISO 8-bit Urdu (IBM CP1006)ISO 8859-2 (Latin-2)ISO 8859-5ISO 8859-6ISO 8859-7ISO-IR-68ISO/IEC 8859-1 (Latin-1)ISO/IEC 8859-10 (Latin-6)ISO/IEC 8859-11 ISO/IEC 8859-13 (Latin-7)ISO/IEC 8859-14ISO/IEC 8859-15 (Latin-9)ISO/IEC 8859-16 (Latin-10)ISO/IEC 8859-3ISO/IEC 8859-4 (Latin-4)ISO/IEC 8859-8ISO/IEC 8859-9KOI8-RKOI8-UKPS 9566KZ-1048 Mac OS CelticMac OS Central EuropeanMac OS CroatianMac OS CyrillicMac OS DingbatsMac OS GaelicMac OS GreekMac OS IcelandicMac OS InuitMac OS RomanMac OS RomanianMac OS TurkishUTF-8Windows-1250Windows-1251Windows-1252Windows-1253Windows-1254Windows-1255Windows-1256Windows-1257Windows-1258Windows-874Windows-932Windows-936Windows-949Windows-950

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

Загрузить close

content_copy Ссылка save Сохранить extension Виджет

В калькуляторах поддерживаются 70 различных кодировок:

Кодировки IBM EBCDIC

EBCDIC — стандартный 8-битный код, разработанный корпорацией IBM для использования на мэйнфреймах IBM и совместимых с ними.

КодировкаЯзыки / Страны использования
EBCDIC 424 HebrewИврит
EBCDIC 037 USA/CanadaСША, Канада, Португалия, Бразилия, Австралия, Новой Зеландия и Южной Африка
EBCDIC 1026 TurkishТурция
EBCDIC 500 InternationalИнтернациональный
EBCDIC 875 GreekГреческий
Кодировки в стандарте ISO 8859

Семейство ASCII совместимых кодировок, разработанных международными организациями ISO и IEC

КодировкаЯзыки/Страны
ISO 8859-2 (Latin-2)Восточноевропейские языки, использующие латиницу
ISO 8859-5Кириллица
ISO 8859-6Арабский
ISO 8859-7Современный греческий
ISO/IEC 8859-1 (Latin-1)Западноевропейские языки
ISO/IEC 8859-10 (Latin-6)Североевропейские языки
ISO/IEC 8859-11Тайский
ISO/IEC 8859-13 (Latin-7)Эстонский, латышский, литовский
ISO/IEC 8859-14Кельтские языки
ISO/IEC 8859-15 (Latin-9)Западноевропейские языки
ISO/IEC 8859-16 (Latin-10)Восточноевропейские языки, использующие латиницу
ISO/IEC 8859-3Турецкий, мальтийский, эсперанто
ISO/IEC 8859-4 (Latin-4)Эстонский, латышский, литовский, гренландский, саамский
ISO/IEC 8859-8Иврит
ISO/IEC 8859-9Турецкий
Кодировки KOI8

KOI8 — 8-битовая кодировка совместимая с ASCII для представления букв кириллических алфавитов

КодировкаЯзыки
KOI8-RРусский
KOI8-UУкраинский
Кодировки Mac OS
КодировкаЯзыки/Страны
Mac OS CelticКельтские языки
Mac OS GaelicГэльский
Mac OS Central EuropeanЯзыки Центральной Европы
Mac OS CroatianСербско/Хорватский
Mac OS CyrillicКириллица
Mac OS GreekГреческй
Mac OS IcelandicИсландский
Mac OS InuitИнуктитут
Mac OS RomanЗападноевропейские языки
Mac OS RomanianРумынский
Mac OS TurkishТурецкий
Кодировки DOS

Кодировки для MS-DOS и подобных ей операционных систем.

КодировкаЯзыки/Страны
DOS Latin US (CP437)Восточноевропейские языки, использующие латиницу
DOS Greek (CP737)Греческий
DOS Baltic Rim (CP775)Эстонский, латышский, литовский
DOS Latin 1 (CP850)Западноевропейские языки
DOS Latin 2 (CP852)Восточноевропейские языки, использующие латиницу
DOS Cyrillic (CP855)Кириллица
CP 856 HebrewИврит
DOS Turkish (CP857)Турецкий
DOS Portuguese (CP860)Португальский
DOS Icelandic (CP861)Исландский
DOS Hebrew (CP862)Иврит
DOS French Canada (CP863)Французский
DOS Arabic (CP864)Арабский
DOS Nordic (CP865)Норвежский
DOS Cyrillic Russian (CP866)Русский
DOS Greek 2 (CP869)Греческий
Кодировки Windows
КодировкаЯзыки/Страны
Windows-1250Языки Центральной и Восточной Европы
Windows-1251Русский, украинский белорусский, сербский, македонский, болгарский
Windows-1252Западноевропейские языки
Windows-1253Современный греческий
Windows-1254Турецкий
Windows-1255Иврит
Windows-1256Арабский
Windows-1257Эстонский, латышский, литовский
Windows-1258Вьетнамский
Windows-874Тайский
Windows-932Японский
Windows-936Упрощенный китайский
Windows-949Корейский
Windows-950Традиционный китайский
KZ-1048Казахский
Прочие кодировки
КодировкаОписание
Atari STКодировка, использовалась в домашних персональных компьютерах фирмы Atari
GSM 03.38Кодировка использовалась в сетях GSM для SMS (коротких сообщений), CB (широковещательная передача коротких сообщений) and USSD (Сервис для организации интерактивных взаимодействий)
KPS 9566Кодировка, разработанная в Северной Корее для поддержки символов корейского языка Хангыль
ISO 8-bit Urdu (IBM CP1006)Использовалась компанией IBM в операционной системе AIX в Пакистане для языка Урду
ISO-IR-68Кодировка для представления символов в языке программирования APL

Правила преобразования исторических кодировок в Юникод были получены с сайта unicode.org

URL кодирование и декодирование

Для тех кто не любит нудных объяснений 🙂

Введите строку в одно из полей и нажмите соответствующую кнопку

Строка в закодированном виде


Строка в нормальном виде

Для тех кто любит «во всем разобраться» 😉

Кодирование URL и просто двоичных данных в последовательность букв, цифр и некоторых специальных знаков латинского алфавита в интернете было связано с ограничением физических устройств на передачу только алфавитно-цифровых символов. В URL такое кодирование обычно применяется для передачи символов в формате Unicode (как правило UTF-8) в последовательность из двух байт, записанных в шестнадцатиричном представлении. Каждый байт предваряется знаком %. При таком кодировании строчка «корова» будет иметь вид: %D0%BA%D0%BE%D1%80%D0%BE%D0%B2%D0%B0. То есть русской букве к будет соответствовать последовательность %D0%BA и.т.д. Такое кодирование является общепринятым для путей к файлам или папкам, входящим в URL.

Подмножесто символов, которые разрешены в URL немного шире чем алфавитно-цифровые символы, так, в URL можно использовать дефис и подчеркивание, но нельзя, например, использовать одинарные или двойные кавычки. Некоторые символы используют для разделения параметров в URL, и их кодирование в этом случае будет неправомочным. В зависимости от отношения к кодированию специальных символов в javascript различают функции encodeURI и decodeURI, которые могут работать с полным URL, и, функции encodeURIComponent / decodeURIComponent, применяемые для параметров, входящих в URL.

Вообще говоря, кодирование параметров может быть достаточно произвольным. Здесь разработчик может использовать любую схему кодировки, если состав ее символов будет коректно передаваться через сеть. Так, вместо строки кириллицы в utf-8 можно применить строку в кодировке Windows 1251. В этом случае слово «корова» будет выглядеть как %EA%EE%F0%EE%E2%E0. То есть, символу к будет соответствовать последовательность из двух букв со знаком процента перед ними — %EA. Закодировать в строки с процентами кириллицу из других кодировок можно в нашем HTML кодировщике. В принципе, допустимы также другие способы кодирования, например, escape/unescape функцию javascript. Слово «корова» в этом случае будет выглядеть как %u043A%u043E%u0440%u043E%u0432%u0430.

URL кодировщик с расширенными возможностями

powershell — невозможно изменить кодировку текстовых файлов в Windows

В Windows PowerShell вы не сможете использовать встроенные командлеты по двум причинам:

  • Исходя из кодовой страницы OEM 852 , я предполагаю, что ваша кодовая страница «ANSI» — Windows-1250 (обе определены локалью унаследованной системы), что не соответствует вашему Windows-1251 , закодированному входные файлы.

  • Использование Set-Content (и аналогичный) с -Encoding UTF8 неизменно создает файлы с BOM (метка порядка байтов) , которую Java и, в более общем плане, утилиты Unix-наследия не понимают .

Примечание. PowerShell Core фактически по умолчанию использует без спецификации UTF8, а также позволяет передавать любой доступный экземпляр [System.Text.Encoding] в параметр -Encoding , чтобы вы могли решить свою проблему. со встроенными там командлетами, при этом необходимо прямое использование платформы .NET только для создания экземпляра кодирования.

Следовательно, вы должны использовать .NET framework напрямую:

  Get-ChildItem *.nfo -Recurse | ForEach-Object {

  $ file = $ _. FullName

  $ mustReWrite = $ ложь
  # Попробуйте сначала прочитать как UTF-8 и выбросить исключение, если
  Обнаружены # недопустимые байты как-UTF-8.
  пытаться {
    [IO.File] :: ReadAllText ($ file, [Text.Utf8Encoding] :: new ($ false, $ true))
  } catch [System.Text.DecoderFallbackException] {
    # Вернуться к Windows-1251
    $ content = [IO.File] :: ReadAllText ($ file, [Text.Encoding] :: GetEncoding (1251))
    $ mustReWrite = $ true
  }

  # Переписать как UTF-8 без спецификации (по умолчанию для .NET framework)
  if ($ mustReWrite) {
    Write-Verbose «Преобразование 1251 в UTF-8: $ file»
    [IO.Файл] :: WriteAllText ($ file, $ content)
  } еще {
    Write-Verbose "Уже в кодировке UTF-8: $ file"
  }

}
  

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

Примечание:

  • Если входной файл содержит только байты с символами диапазона ASCII (7 бит), он по определению также закодирован в UTF-8, поскольку UTF-8 является расширенным набором кодировки ASCII.

  • Это очень маловероятно с реальным вводом, но чисто технически файл в кодировке Windows-1251 может также быть допустимым файлом UTF-8 , если , битовые шаблоны и последовательности байтов оказываются действительный UTF-8 (который имеет строгие правила относительно того, какие битовые шаблоны и где разрешены).
    Однако такой файл не будет содержать значимого содержимого Windows-1251.

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

ubuntu — преобразование кириллицы Procmail

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

Поскольку первоначальные спецификации электронной почты и MIME включали предположение, что заголовки будут содержать только строгий US-ASCII, кодирование заголовка является полностью отдельной проблемой от кодирования MIME тела сообщения.

Формат:

  =? <набор-символов> [* язык]? ? <текст>? =
  

будет либо Q для цитируемой печати, либо B для кодировки base64.Если сообщение кажется полным бредом, я предполагаю, что вы видите base64. И имя набора символов, и буква кодировки не чувствительны к регистру.

Итак, вы можете увидеть:

  Тема: =? Utf-8? B? SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSB1bmRlcnN0b29kIHRoZSBleGFtcGxlLgo =? =
  

Или с добавленным идентификатором языка:

  Тема: =? Utf-8 * en? B? SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSB1bmRlcnN0b29kIHRoZSBleGFtcGxlLgo =? =
  

Пример ручного декодирования:

  $ echo "SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSB1bmRlcnN0b29kIHRoZSBleGFtcGxlLgo =" | base64 -d
Если вы можете это прочитать, значит, вы поняли этот пример. 

Тот факт, что ваш существующий сценарий Procmail включает принудительную маркировку кодировок набора символов iso-8859-1 , US-ASCII и UNKNOWN-8BIT как windows-1251 , указывает на то, что ваша реальная проблема может быть неправильно маркированный символ кодирование. Другими словами:

  • старый почтовый клиент выдает windows-1251 кириллицей, не помечая их как таковые, возможно, также в заголовках
  • , электронное письмо проходит через почтовый сервер, который либо не сообщает должным образом о том, что он может правильно обрабатывать 8-битные почтовые кодировки, либо ревностно пытается обеспечить маркировку всех наборов символов, кроме простого US-ASCII.

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

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

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

Я думаю, вам придется исследовать свои проблемные сообщения, чтобы выяснить, как на самом деле закодированы их заголовки Subject: .Они:

  • обычная без надписи windows-1251 ?
  • действительно действительный base64 -encoded UTF-8?
  • или windows-1251 , который был закодирован base64 и неправильно обозначен как UTF-8?

К сожалению, procmail и его сопутствующий formail может оказаться недостаточным для получения заголовка Subject: в незакодированной форме. Они не поддерживаются с 2001 года, и даже их автор теперь предлагает перейти к чему-то другому.Но если вы хотите и дальше использовать procmail , вам понадобится что-то вроде этого скрипта:

https://github.com/akkana/scripts/blob/master/decodemail.py

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

Вам нужно сначала декодировать содержимое заголовка Subject: и сохранить его в переменной:

 : 0 ч
SUBJDECODED = | расшифровать почту.py Тема:

: 0 ч.
SUBJWASRAW = | formail -xSubject: | перекодировать windows-1251..UTF-8
  

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

  SUBJWASWIN1251 = `echo" $ SUBJDECODED "| перекодировать windows-1251..UTF-8`
  

Если существует несколько возможных кодировок, возможно, вам придется создать несколько таких переменных.

Тогда можно сопоставить по любой версии темы:

 : 0
* SUBJWASRAW ?? ваш-предмет-регулярное выражение-здесь
{
    # Здесь предметом был необработанный windows-1251 без какой-либо кодировки.# Переменная преобразована в действительный UTF-8, используемый этой системой,
    # теперь заголовок можно переписать в удобной форме.
    # (В этом примере тема остается необработанной без метки UTF-8,
    # может быть приемлемым или неприемлемым для всего, что вы используете для просмотра электронной почты.
    # Но в современных почтовых клиентах, совместимых с RFC 6532
    # в системе, которая использует UTF-8, это может быть нормально.)

    : 0 f
    | formail -i "Тема: $ SUBJWASRAW"
}

: 0
* SUBJWASWIN1251 ?? ваш-предмет-регулярное выражение-здесь
{
    # regexp соответствует, поэтому мы знаем, что тема была windows-1251
    # неправильно обозначен как UTF-8. Subject :.* Префикс , поскольку переменные будут содержать только значение   заголовка  Subject: . 

Руководство пользователя

Глава 6: Поддержка Unicode и не-ASCII

Глава 6. Поддержка Unicode и не-ASCII

6.1 Формат для печати в кавычках
6.2 Символы, отличные от ASCII в заголовках
6.3 Unicode и UTF-8
6.4 Поддержка UTF-8 в AspEmail
6.5 Допустимые значения CharSet

6.1 формат цитируемой печати

AspEmail может отправлять сообщения в алфавитах, отличных от US-ASCII. за счет поддержки формата «Цитата для печати». Этот формат описан в RFC-2045. Идея формата заключается в том, что символы с кодами меньше 33 и больше чем 126 представлены знаком "=", за которым следует двузначное шестнадцатеричное представление. ценности персонажа. Например, десятичное значение 12 (подача формы US-ASCII) представлен как = 0C , а десятичное значение 61 (US-ASCII "=") может быть представлено как = 3D .

AspEmail кодирует тело сообщения в формате Quoted-Printable автоматически, если для свойства ContentTransferEncoding установлено значение строка "Quoted-Printable" (регистр букв не имеет значения). Вы также можете установить свойство Charset к соответствующему набору символов. Следующий фрагмент кода отправляет сообщение на русском языке:

<% @ codepage = 1251%>

<%
...
Почта.Кодировка = "Windows-1251"
Mail.Body = "-".
Mail.ContentTransferEncoding = "Quoted-Printable"
%>

Директива <% @ codepage = 1251%> предписывает интерпретатор ASP для обработки жестко запрограммированных символов в сценарии в виде русских символов (1251 - русская кодовая страница). Как результат, свойство Body получит русскую строку Unicode.

6.2 символа не-ASCII в заголовках

Если вы хотите отправить сообщение с определенными заголовками, например, Тема: , To: или From: , содержащие символы, отличные от US-ASCII, следует использовать метод Mail.EncodeHeader для кодирования строки символов в соответствии с RFC 1522. Метод принимает один обязательный параметр, строку заголовка, и один необязательный параметр, набор символов, который по умолчанию равен « ISO-8859-1 ».Например:

<% @ codepage = 1251%>

<%
Mail.Subject = Mail.EncodeHeader ("-", "Windows-1251")
Mail.FromName = Mail.EncodeHeader ("", "Windows-1251")
Mail.AddAddress "[email protected]", Mail.EncodeHeader ("")
%>

6.3 Unicode и UTF-8

Из MSDN: "Юникод - это 16-битный стандарт кодировки символов фиксированной ширины, который охватывает практически все символы, обычно используемые на компьютерах сегодня.Это включает в себя большинство письменных языков мира, а также издательские персонажи, математические и технические символы и знаки препинания ".

С Unicode.org: "Компьютеры ... хранят буквы и другие символы присвоение номера каждому. До изобретения Unicode существовало сотни различных систем кодирования для присвоения этих чисел. Ни одна кодировка не может содержать достаточно символов ... Unicode предоставляет уникальный номер для каждого символа, независимо от того, какая платформа, какая программа, на каком языке.«

Например, основная латинская буква «А» имеет шестнадцатеричный код 0041 (65), русский буква имеет код Hex 0416 (1046), а китайский иероглиф имеет код Hex 32A5 (12965).

UTF-8 (формат преобразования Unicode, 8-битная форма кодирования) рекомендуется формат, который будет использоваться для отправки данных на основе Unicode по сетям, в частности, через Интернет. UTF-8 представляет значение Unicode как последовательность из 1, 2 или 3 байтов.

Символы Юникода в диапазоне от 0000 до 007F кодируются просто как байты. 00 до 7F. Это означает, что файлы и строки, содержащие только 7-битный ASCII символы имеют одинаковую кодировку как в ASCII, так и в UTF-8. Следовательно, Unicode 0041 («A») в UTF-8 - это Hex 41.

Символы Юникода в диапазоне от 0080 до 07FF кодируются как последовательность из двух байтов. Например, Unicode 0416 () кодируется как Hex D0 96. Кодируются символы Unicode в диапазоне от Hex 0800 до FFFF. как последовательность из трех байтов.Например, Unicode 32A5 () кодируется как Hex E3 8A A5.

6.4 Поддержка UTF-8 в AspEmail

AspEmail 5.0 предлагает полную поддержку UTF-8 как в теле сообщения, так и в заголовках. Чтобы отправить сообщение в кодировке UTF-8, вы должны установить CharSet свойство к строке " UTF-8 " (регистр не имеет значения), и ContentTransferEncoding на « Quoted-Printable ».Вы также должны передать UTF-8 в качестве второго аргумента для EncodeHeader .

В следующем примере кода демонстрируется использование UTF-8:






<%
'изменить на адрес вашего собственного SMTP-сервера
strHost = "smtp.myisp.net"

'Включить UTF-8 -> Перевод Unicode для элементов формы
Session.CodePage = 65001 'Код UTF-8

Если Запрос ("Отправить") "" То
Установите Mail = Server.CreateObject ("Persits.MailSender")
'введите действительный SMTP-хост
Mail.Host = strHost

Mail.From = "[email protected]" 'с адреса
Mail.FromName = Mail.EncodeHeader (Запрос ("FromName"), "utf-8")
Mail.AddAddress Request («Кому»)

'тема сообщения
Mail.Subject = Mail.EncodeHeader (Запрос ("Тема"), "utf-8")

'тело сообщения
Mail.Body = Request ("Body")

'Параметры UTF-8
Почта.CharSet = "UTF-8"
Mail.ContentTransferEncoding = "Quoted-Printable"
Mail.Send 'отправить сообщение
Response.Write "Сообщение отправлено" & Request ("To")
Конец, если
%>




AspEmail: Unicode.asp

<ТЕЛО>


<ТАБЛИЦА ЯЧЕЙКИ = 0 ЯЧЕЙКА = 0>
Введите адрес электронной почты:
Введите свое имя:
Введите тему:
Введите текст:




В этом примере кода есть несколько важных элементов, которые нельзя упускать из виду:

Этот тег META определяет набор символов для этой страницы как UTF-8.Это, помимо прочего, указывает браузеру кодировать все элементы формы в кодировке UTF8. когда форма отправлена.

Session.CodePage = 65001

Эта строка указывает нашему сценарию ASP преобразовывать элементы формы в кодировке UTF8. (возвращается коллекцией Request.Form) обратно к обычным строкам Unicode. Номер 65001 - это кодовая страница UTF-8.

Mail.Subject = Mail.EncodeHeader (Запрос ("Тема"), "utf-8")

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

Mail.CharSet = "UTF-8"
Mail.ContentTransferEncoding = "Quoted-Printable"

Эти две строки обеспечивают правильную кодировку UTF-8 тела сообщения.

Щелкните ссылки ниже, чтобы запустить этот пример кода:

http: //localhost/aspemail/NonAscii/Unicode.asp
http: //localhost/aspemail/NonAscii/Unicode.aspx

6.5 допустимых значений CharSet

Вы можете указать следующие строковые значения для свойства CharSet , а также второй необязательный аргумент метода EncodeHeader :
Значение Значение
"УТФ-8" UTF-8
"УТФ-7" UTF-7
"Окна-1250"
"cp1250"
ANSI - Центральная Европа
"Windows-1251"
"cp1251"
ANSI - кириллица
"Windows-1252"
"cp1252"
"ascii"
"us-ascii"
Латиница I
"Windows-1253"
"cp1253"
ANSI - греческий
"Окна-1254"
"cp1254"
ANSI - турецкий
"Windows-1255"
"cp1255"
ANSI - иврит
"Окна-1256"
"cp1256"
ANSI - арабский
"Windows-1257"
"cp1257"
ANSI - Балтика
"Окна-1258"
"cp1258"
ANSI - вьетнамский
"ISO-8859-1" Latin I (значение по умолчанию)
"ISO-8859-2" Центральная Европа
"ISO-8859-3" Латиница 3
"ISO-8859-4" Балтика
"ISO-8859-5" Кириллица
"ISO-8859-6" Арабский
"ISO-8859-7" Греческий
"ISO-8859-8" Еврейский
"ISO-8859-9" Латиница 5
"ISO-8859-15" Латиница 9
"cp866" Русский DOS
"кои8-р" Русский
"кои8-у" Украинский
shift_jis Японская Windows
"ks_c_5601-1987"
"корейский"
Корейский
«EUC-KR»
«корейский»
EUC - корейский
"BIG5" Традиционный китайский Windows
"GB2312"
"китайский"
Китайский упрощенный
"HZ-GB-2312" Упрощенный китайский HZ
"EUC-JP" EUC - японский
"X-EUC-TW" EUC - традиционный китайский

Онлайн калькулятор: Кодировка текстового файла

В предыдущей статье я уже затрагивал тему кодирования текста, более подробно описал Unicode и его представление UTF-8 в виде последовательности символов переменной длины.
Калькулятор конвертирует текст в несколько устаревших кодировок. Я называю их устаревшими, потому что в современных приложениях можно использовать Unicode и его наиболее удобное представление UTF-8.
Однако старые кодировки также могут быть полезны, когда вам нужно компактно закодировать текст, например, для последующего сжатия и передачи, когда принимающая сторона точно знает, в какой кодировке передается текст. Например, русский текст, закодированный в Windows-1251, займет половину места, чем текст в UTF-8.
Итак, калькулятор ниже позволяет вам загрузить файл в выбранной кодировке или просмотреть шестнадцатеричный дамп закодированного текста.

Закодированный текст
Encoding Atari STCP 856 Hebrew DOS Arabic (CP864) DOS Baltic Rim (CP775) DOS Cyrillic (CP855) DOS Cyrillic Russian (CP866) DOS French Canada (CP863) DOS Greek (CP737) DOS Greek 2 (CP869) DOS Hebrew (CP869) DOS Hebrew CP862) DOS Исландский (CP861) DOS Latin 1 (CP850) DOS Latin 2 (CP852) DOS Latin США (CP437) DOS Nordic (CP865) DOS Португальский (CP860) DOS Турецкий (CP857) EBCDIC 037 США / Канада EBCDIC 1026 Турецкий EBCDIC 424 Иврит EBCDIC 500 Международный EBCDIC 875 Греческий GSM 03.38ISO 8-битный урду (IBM CP1006) ISO 8859-5ISO 8859-6ISO 8859-7ISO 8859-8ISO 8859-9ISO-IR-68ISO / IEC 8859-1 (Latin-1) ISO / IEC 8859-10 (Latin-6) ISO / IEC 8859-11ISO / IEC 8859-13 (Latin-7) ISO / IEC 8859-14ISO / IEC 8859-15 (Latin-9) ISO / IEC 8859-16 (Latin-10) ISO / IEC 8859-2 ( Latin-2) ISO / IEC 8859-3ISO / IEC 8859-4 (Latin-4) KOI8-RKOI8-UKPS 9566KZ-1048Mac OS CelticMac OS Central EuropeanMac OS CroatianMac OS CyrillicMac OS DingbatsMac OS GaelicMac OS GreekMac OS IcelandicMac OS InuitMac OS Roman РумынскийMac OS ТурецкийUTF-8Windows-1250Windows-1251Windows-1252Windows-1253Windows-1254Windows-1255Windows-1256Windows-1257Windows-1258Windows-874Windows-932Windows-936Windows-949Windows-950To быть или не быть, это сохранить вопрос Link 9000_copy2 Сохранить расширение Виджет

Вы можете просмотреть созданный файл с помощью декодера текстовых файлов.

Калькулятор вернет ошибку, если выбрана несовместимая кодировка. В случае Unicode это невозможно - он содержит символы всех современных языков. Но устаревшие 8-битные кодировки содержат ограниченный набор символов. Для текста на нескольких языках необходимая кодировка может вообще не быть найдена.
Многие кодировки были изобретены для разных языков и наборов символов за годы до Unicode, поэтому выбор правильной кодировки для вашего текста может быть сложной задачей.Следующий калькулятор находит все кодировки, совместимые с введенным текстом.

Выберите кодировку текста
Быть или не быть, Вот в чем вопрос Кодировка Atari STCP 856 Hebrew DOS Arabic (CP864) DOS Baltic Rim (CP775) DOS Cyrillic (CP855) DOS Cyrillic Russian (CP866) DOS French Canada (CP863) DOS Greek (CP737) DOS Греческий 2 (CP869) DOS Иврит (CP862) DOS Исландский (CP861) DOS Latin 1 (CP850) DOS Latin 2 (CP852) DOS Latin США (CP437) DOS Nordic (CP865) DOS Португальский (CP860) DOS Турецкий ( CP857) EBCDIC 037 США / Канада EBCDIC 1026 Турецкий EBCDIC 424 Иврит EBCDIC 500 Международный EBCDIC 875 Греческий GSM 03.38ISO 8-битный урду (IBM CP1006) ISO 8859-5ISO 8859-6ISO 8859-7ISO 8859-8ISO 8859-9ISO-IR-68ISO / IEC 8859-1 (Latin-1) ISO / IEC 8859-10 (Latin-6) ISO / IEC 8859-11ISO / IEC 8859-13 (Latin-7) ISO / IEC 8859-14ISO / IEC 8859-15 (Latin-9) ISO / IEC 8859-16 (Latin-10) ISO / IEC 8859-2 ( Latin-2) ISO / IEC 8859-3ISO / IEC 8859-4 (Latin-4) KOI8-RKOI8-UKPS 9566KZ-1048Mac OS CelticMac OS Central EuropeanMac OS CroatianMac OS CyrillicMac OS DingbatsMac OS GaelicMac OS GreekMac OS IcelandicMac OS InuitMac OS Roman Румынский Mac OS ТурецкийUTF-8Windows-1250Windows-1251Windows-1252Windows-1253Windows-1254Windows-1255Windows-1256Windows-1257Windows-1258Windows-874Windows-932Windows-936Windows-949Windows-950

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

Скачать закрыть

content_copy Ссылка сохранить Сохранить расширение Виджет

Калькуляторы поддерживают 70 различных кодировок:

IBM EBCDIC

EBCDIC - стандартная 8-битная кодировка, разработанная IBM для использования на мэйнфреймах IBM.

Кодировка Языки / страны
EBCDIC 424 Еврейский Еврейский
EBCDIC 037 США / Канада США, Канада, Португалия, Бразилия, Австралия, Новая Зеландия, Южная Африка
EBCDIC 1026 Турецкий Турецкий
EBCDIC 500 Международный Международный
EBCDIC 875 Греческий Греческий
ISO 8859 кодировки

Семейство кодировок, совместимых с ASCII, разработанных Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC)

Кодировка Языки / страны
ISO 8859-2 (Latin-2) Восточноевропейских языков с использованием латинского алфавита
ISO 8859-5 Кириллица
ISO 8859-6 Арабский
ISO 8859-7 Новогреческий
ISO / IEC 8859-1 (Latin-1) западноевропейские языки
ISO / IEC 8859-10 (Latin-6) Североевропейские языки
ISO / IEC 8859-11 Тайский
ISO / IEC 8859-13 (Latin-7) эстонский, латышский, литовский
ISO / IEC 8859-14 Кельтские языки
ISO / IEC 8859-15 (Latin-9) западноевропейские языки
ISO / IEC 8859-16 (Latin-10) Восточноевропейских языков с использованием латинского алфавита
ISO / IEC 8859-3 Турецкий, Мальтийский, Эсперанто
ISO / IEC 8859-4 (Latin-4) эстонский, латышский, литовский, гренландский, саамский
ISO / IEC 8859-8 Еврейский
ISO / IEC 8859-9 Турецкий
Семейство кодировок KOI8

KOI8 - 8-битная ASCII-совместимая кодировка для представления букв кириллических алфавитов

Кодировка языков
КОИ8-Р Русский
КОИ8-У Украинский
Кодировки Mac OS
Кодировка Языки / страны
Mac OS Celtic Кельтские языки
Mac OS гэльский гэльский
Mac OS Центральноевропейская Центральноевропейские языки
Mac OS Хорватский Хорватский
Mac OS Кириллица Кириллица
Mac OS греческий Греческий
Mac OS Исландский Исландский
Mac OS Inuit Инуиты
Mac OS Роман западноевропейские языки
Mac OS Румынский Румынский
Mac OS турецкий Турецкий
DOS Cod Pages

Кодировки для MS-DOS и аналогичных операционных систем.

Кодировка Языки / страны
DOS Latin US (CP437) Восточноевропейских языков с использованием латинского алфавита
DOS Греческий (CP737) Греческий
DOS Baltic Rim (CP775) эстонский, латышский, литовский
DOS Latin 1 (CP850) западноевропейские языки
DOS Latin 2 (CP852) Восточноевропейских языков с использованием латинского алфавита
DOS Кириллица (CP855) Кириллица
CP 856 Еврейский Еврейский
DOS Турецкий (CP857) Турецкий
DOS Португальский (CP860) Португальский
DOS Исландский (CP861) Исландский
DOS Еврейский (CP862) Еврейский
DOS Французская Канада (CP863) Французский
DOS Арабский (CP864) Арабский
DOS Nordic (CP865) Скандинавский
DOS Кириллица Русский (CP866) Русский
DOS Греческий 2 (CP869) Греческий
Кодировки Windows
Кодировка Языки / страны
Окна-1250 Языки Центральной и Восточной Европы
Окна-1251 русский, украинский белорусский, сербский, македонский, болгарский
Окна-1252 западноевропейские языки
Окна-1253 Новогреческий
Окна-1254 Турецкий
Окна-1255 Еврейский
Окна-1256 Арабский
Окна-1257 эстонский, латышский, литовский
Окна-1258 Вьетнамки
Окна 874 Тайский
Окна-932 Японский
Окна-936 Китайский упрощенный
Окна-949 Корейский
Окна-950 Китайский традиционный
KZ-1048 казах
прочие
Кодировка Описание
Atari ST Кодировка, используемая в домашних персональных компьютерах Atari
GSM 03.38 Кодировка использовалась в сетях GSM для SMS, CB (широковещательные короткие сообщения) и USSD
КПС 9566 Кодировка, разработанная в Северной Корее для поддержки корейских символов хангыль
ISO 8-битный урду (IBM CP1006) Кодировка, используемая IBM в операционной системе AIX в Пакистане для языка урду
ISO-IR-68 Кодировка для представления символов на языке программирования APL

Правила преобразования кодировок в Unicode были получены из Unicode.org сайт.

Изменение HTML-страницы на Unicode

Изменение HTML-страницы на Unicode

Целевая аудитория: новички в интернационализации, которые хотят изменить кодировку символов своих HTML-страниц.

Как изменить кодировку символов моей HTML-страницы на Unicode / UTF-8?

Итак, вы слышали, что использовать Unicode полезно (UTF-8) для ваших страниц, а не устаревшая кодировка символов, такая как Latin1 (Windows 1252 или ISO 8859-1) или Shift_JIS, и вы слышали, что это делают другие, но вы не знаете, как это сделать. .Эта страница поможет.

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

Более подробные советы по преобразованию сложных сайтов, программного обеспечения и данных в Unicode см. В статье «Переход на Unicode».

Шаг 1. Сохраните данные как UTF-8

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

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

Обратите внимание, что вам может потребоваться убедиться, что данные не содержат подпись UTF-8, также известна как метка порядка байтов (BOM).

Шаг 2. Объявите кодировку на своей странице

Вы должны изменить объявление кодировки символов в свою страницу (или добавьте ее, если вы ее еще не объявили).

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

Шаг 3. Убедитесь, что ваш сервер работает правильно

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

Проверьте это, поместив URL-адрес своей страницы в эту форму. Вы попадете в Средство проверки интернационализации. Найдите в таблице строку с заголовком HTTP Content-Type в разделе Кодировка символов и убедитесь, что там указано UTF-8 или Информация о кодировке не найдена .

Если HTTP Content-Type показывает кодировку, отличную от UTF-8, вам необходимо предпринять шаги, чтобы исправить это, потому что объявление в заголовке HTTP переопределит информацию на странице

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

Раздел 4.4. Кодирование всего сообщения

4.4. Кодирование всего сообщения

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

Вот пример попытки фишинга:

 Уважаемый пользователь e-gold! Наша система прошла серьезную профилактику, проверьте работу вашего аккаунта e-gold.Сайт e-gold: http://www.e-gold.com Это автоматическое электронное письмо. НЕ отвечайте на это письмо. 

Сообщение достаточно простое, но для проверки этого URL-адреса необходимо просмотреть источник сообщения. Вот он, некоторые заголовки удалены:

 Дата: Вт, 30 марта 2004 г. 20:15:29 -0500 Кому: [email protected] От: =? Windows-1251? B? QWNjb3VudFJvYm90X2Rvbm90cmVwbHlAZS1nb2 xkLmNvbQ ==?  Тема: =? Windows-1251? B? QXR0ZW50aW9uIGUtZ29sZCB1c2VyICE =? = MIME-Version: 1 Content-Transfer-Encoding.0: Base64 Content-Type: text / html; кодировка = "Windows-1251" PGh0bWw + CjxoZWFkPgo8dGl0bGU + VW50aXRsZWQgRG9jdW1lbnQ8L3RpdGxl Pgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl eHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTEiPgo8L2hlYWQ + Cgo8Ym9k eSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDAwIj4KPHA + RGVhciBl LWdvbGQgdXNlciAhPC9wPgo8cD5PdXIgc3lzdGVtIGhhcyB1bmRlcmdvbmUg dG8gc2VyaW91cyBwcmV2ZW50aXZlIG1haW50ZW5hbmNlLCBwbGVhc2UsIGNo ZWNrIHVwIAogIGZ1bmN0aW9uaW5nIHlvdXIgZS1nb2xkIGFjY291bnQuPC9w Pgo8cD5UaGUgZS1nb2xkIHNpdGUgaXMgYXQ6IDwvcD4KPHA + PGEgaHJlZj0i aHR0cDovL3d3dy5lLWdvbGQuY29tAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFAcmV5bnNhbi5uZXRmaXJtcy5j b20iPmh0dHA6Ly93d3cuZS1nb2xkLmNvbTwvYT48L3A ​​+ CjxwPlRoaXMgaXMg YXV0b21hdGljIGVtYWlsLjxicj4KICBEbyBub3QgcmVwbHkgdG8gdGhpcyBl bWFpbC48L3A ​​+ CjwvYm9keT4KPC9odG1sPgo = 

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

 Content-Transfer-Encoding: Base64 

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

Он использует подмножество 65 символов из алфавита US_ASCII, 64 символа, которые фактически кодируют данные, и =, который представляет конец блока Base64, как показано в Таблице 4-1.

    Кодирование

0 9139 9398 9398 93

34

0203 9378 937803
9378

К

03


03

56 9392 9392 9392 39


56
91 339

X

03

030 8

00 9392 9392 9392 9392 9398 9392

932

93239

93239

0

9

9329 входные данные должны быть представлены одним символом ASCII.Байт имеет 8 бит, поэтому для кодирования используются 3-байтовые блоки данных, то есть 24 бита, и кодируются как 4 символа ASCII. Как видите, это не схема сжатия. Обычно вы сначала сжимаете файл, а затем кодируете его двоичные данные с помощью Base64.

Ручное декодирование вывода было бы чрезвычайно утомительно. Один из способов справиться с этим - скопировать закодированный текст и ничего больше в файл и передать его программе openssl Unix.

 % openssl enc -d -a -in your_file  

Альтернативой является установка модуля Perl MIME :: Base64 в вашей системе, а затем использование этого однострочника Perl для его декодирования.

 % perl -MMIME :: Base64 -ne 'print decode_base64 ($ _)'  

Приведенный ранее пример декодирует эту простую веб-страницу:

    Untitled Document < / title> <meta http-Equiv = "Content-Type" content = "text / html; charset = windows-1251"> </head> <body bgcolor = "# FFFFFF" text = "# 000000"> <p> Уважаемый пользователь e-gold! </p> <p> Наша система прошла серьезную профилактику, пожалуйста, проверьте работу вашей учетной записи e-gold.</p> <p> Сайт e-gold находится по адресу: </p> <p> <a href="http://www.e-gold.com@reynsan.netfirms.com"> http: // www.e-gold.com </a> </p> <p> Это автоматическое письмо. <br> Не отвечайте на это письмо. </p> <script defer src="https://schtirlitz.ru/wp-content/cache/autoptimize/js/autoptimize_37ed0fd9f77c73ed46f8177b48009968.js"></script></body> </html> </pre><p> Это просто HTML-код текста, отображаемого в почтовом клиенте. Разница в том, что вы можете увидеть реальную цель URL-адреса в этом сообщении: http: //www.e-gold.com@reynsan.netfirms.com. Не совсем так. Фактически, это тот URL, который я использовал в качестве примера в предыдущем разделе <i> Имена пользователей в URL-адресах </i>, с заполнением 140% 01 символами. Этот символ является непечатаемым символом ASCII, поэтому, когда вы просматриваете декодированный вывод в большем количестве, вы их не видите. Откройте вывод в emacs, и они будут видны как 140 символов Ctrl-A.</p><p> Если все это кажется излишне сложным, помните, что одна из причин маскировки - это отказ от программного обеспечения для фильтрации спама. Если это программное обеспечение не может декодировать Base64, чтобы получить реальный текст, оно не может определить, является ли это легитимным сообщением.Та же мотивация заставляет некоторых спамеров создавать изображения, содержащие текст сообщения, возможно, захваченные из дампа экрана. Сообщения электронной почты могут содержать URL-адрес изображения на удаленном сервере или могут включать изображение как блок закодированного текста в сообщении. Изображения помещаются в тег привязки, поэтому вы можете щелкнуть в любом месте изображения и перейти к целевому URL-адресу.</p><p> Этот целевой URL был взят из сообщения, предположительно пришедшего из банка. Чтобы усложнить задачу, URL был закодирован:</p><dl><dd> http: //% 32% 32% 31% 2E% 31% 38% 34% 2E% 39% 32% 2E% 31% 36% 39:% 34% 39% 30% 33 /% 63% 69% 74 /% 69% 6E% 64% 65% 78% 2E% 68% 74% 6D</dd></dl><p> Преобразование, которое дает числовой IP-адрес и нестандартный номер порта:</p><dl><dd> http: // 221.184.92.169: 4903 / cit / index.htm</dd></dl><p> Это хороший пример множества уровней обмана, которые используют профессиональные мошенники, чтобы затруднить работу спам-фильтров и людей вроде нас, которые хотят их раскрыть.</p><h2><span class="ez-toc-section" id="_IntelliJ_IDEA"> Кодирование | IntelliJ IDEA </span></h2><p> Чтобы правильно отображать и редактировать файлы, IntelliJ IDEA необходимо знать, какую кодировку использовать. Как правило, файлы исходного кода в основном находятся в UTF-8. Это рекомендуемая кодировка, если у вас нет других требований.</p><p> Чтобы определить кодировку файла, IntelliJ IDEA использует следующие шаги:</p><ul><li><p> Если присутствует метка порядка байтов (BOM), IntelliJ IDEA будет использовать соответствующую кодировку Unicode независимо от всех других настроек.Для получения дополнительной информации см. Метка порядка байтов.</p></li><li><p> Если в файле явно указана кодировка, IntelliJ IDEA будет использовать указанную кодировку. Например, это может относиться к файлам XML, HTML и JSP. Явное объявление также отменяет все остальные настройки, но вы можете изменить его в редакторе.</p></li><li><p> Если в файле нет спецификации и явного объявления кодировки, IntelliJ IDEA будет использовать кодировку, настроенную для файла или каталога в параметрах кодировки файла.Если кодировка не настроена для файла или каталога, IntelliJ IDEA будет использовать кодировку родительского каталога. Если кодировка родительского каталога также не настроена, IntelliJ IDEA вернется к кодировке проекта, а при отсутствии проекта - к глобальной кодировке.</p></li></ul><h4 data-toc="Encoding#single-file"><span class="ez-toc-section" id="i-14"> Изменить кодировку, используемую для просмотра файла </span></h4><p> Если IntelliJ IDEA отображает символы в файле неправильно, вероятно, не удалось определить кодировку файла. В этом случае вам необходимо указать правильную кодировку для использования при просмотре и редактировании этого файла.</p><ul><li><p> Открыв файл в редакторе, выберите либо в главном меню, либо щелкните виджет «Кодировка файла» в строке состояния и выберите правильную кодировку файла.</p><p> Список кодировок достаточно большой. Вы можете использовать быстрый поиск, чтобы быстро найти правильную кодировку: начните вводить текст, когда всплывающее окно открыто.</p><p> Кодировки, отмеченные значком или могут изменить содержимое файла. В этом случае IntelliJ IDEA открывает диалоговое окно, в котором вы можете выбрать, что делать с файлом:</p><ul><li><p> Reload: загрузить файл в редактор с диска и применить изменения кодировки только к редактору.Вы увидите изменения содержимого, связанные с выбранной кодировкой, но сам файл не изменится.</p></li><li><p> Конвертировать: перезаписать файл с выбранной кодировкой.</p></li></ul></li></ul><p> Это добавит ассоциацию для файла в настройки кодировки файла. IntelliJ IDEA будет использовать указанную кодировку для просмотра и редактирования этого файла.</p><h3 data-toc="Encoding#file-encoding-settings"><span class="ez-toc-section" id="i-15"> Настроить параметры кодировки файлов </span></h3><p> В диалоговом окне «Настройки / Предпочтения» <kbd data-secondary_macos="⌘," data-primary_kde="Ctrl+Alt+S" data-secondary_eclipse="⌃⌥S" data-primary_gnome="Ctrl+Alt+S" data-secondary_emacs="⌃⌥S" data-secondary_macos_system_shortcuts="⌘," data-primary_netbeans="Ctrl+Alt+S" data-secondary_netbeans="⌃⌥S" data-primary_emacs="Ctrl+Alt+S" data-secondary_eclipse_macos="⌘," data-primary_visual_studio="Ctrl+Alt+S" data-secondary_visual_studio="⌃⌥S" data-primary_windows="Ctrl+Alt+S" data-secondary_sublime_text_macos="⌘," data-secondary_sublime_text="⌃⌥S" data-primary_sublime_text="Ctrl+Alt+S" data-secondary_intellij_idea_classic="⌘," data-primary_xwin="Ctrl+Alt+S" data-primary_eclipse="Ctrl+Alt+S"> Ctrl + Alt + S </kbd> выберите.</p><p> IntelliJ IDEA использует эти параметры для просмотра и редактирования файлов, для которых не удалось определить кодировку, а также использует указанные кодировки для новых файлов.</p><h4 data-toc="Encoding#console"><span class="ez-toc-section" id="i-16"> Выбрать кодировку вывода консоли </span></h4><p> По умолчанию IntelliJ IDEA использует системную кодировку для просмотра вывода консоли.</p><ol><li><p> В диалоговом окне «Настройки / Предпочтения» <kbd data-secondary_macos="⌘," data-primary_kde="Ctrl+Alt+S" data-secondary_eclipse="⌃⌥S" data-primary_gnome="Ctrl+Alt+S" data-secondary_emacs="⌃⌥S" data-secondary_macos_system_shortcuts="⌘," data-primary_netbeans="Ctrl+Alt+S" data-secondary_netbeans="⌃⌥S" data-primary_emacs="Ctrl+Alt+S" data-secondary_eclipse_macos="⌘," data-primary_visual_studio="Ctrl+Alt+S" data-secondary_visual_studio="⌃⌥S" data-primary_windows="Ctrl+Alt+S" data-secondary_sublime_text_macos="⌘," data-secondary_sublime_text="⌃⌥S" data-primary_sublime_text="Ctrl+Alt+S" data-secondary_intellij_idea_classic="⌘," data-primary_xwin="Ctrl+Alt+S" data-primary_eclipse="Ctrl+Alt+S"> Ctrl + Alt + S </kbd> выберите.</div><footer class="entry-footer"> <span class="cat-links">Категории: <a href="https://schtirlitz.ru/category/raznoe-2" rel="category tag">Разное</a></span></footer></article><nav class="navigation post-navigation" aria-label="Записи"><h2 class="screen-reader-text">Навигация по записям</h2><div class="nav-links"><div class="nav-previous"><a href="https://schtirlitz.ru/raznoe-2/chto-pisat-v-bloknotax-podborka-idej-25-sposobov-napolnit-bloknot.html" rel="prev"><span class="be-post-nav-label btn btn-sm cont-btn no-underl"><small class="fas fa-chevron-left mr-2"></small>Назад</span></a></div><div class="nav-next"><a href="https://schtirlitz.ru/raznoe-2/ispravleniya-oshibok-onlajn-russkogo-yazyka-proverka-orfografii-onlajn-ispravlenie-oshibok.html" rel="next"><span class="be-post-nav-label btn btn-sm cont-btn no-underl">Вперед<small class="fas fa-chevron-right ml-2"></small></span></a></div></div></nav><div id="comments" class="comments-area"> <a href="#" class="btn btn-primary btn-sm be-open-comment-form">Оставить комментарий</a><div id="respond" class="comment-respond"><h3 id="reply-title" class="comment-reply-title">Добавить комментарий <small><a rel="nofollow" id="cancel-comment-reply-link" href="/raznoe-2/kakoe-soobshhenie-zakodirovano-v-kodirovke-windows-1251-opredelite-slovo-kotoroe-zakodirovano-v-kodirovke-windows-1251-a-prochitano-v-koi-8.html#respond" style="display:none;">Отменить ответ</a></small></h3><form action="https://schtirlitz.ru/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-notes"><span id="email-notes">Ваш адрес email не будет опубликован.</span> <span class="required-field-message">Обязательные поля помечены <span class="required">*</span></span></p><p class="comment-form-comment"><label for="comment">Комментарий <span class="required">*</span></label><textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required></textarea></p><p class="comment-form-author"><label for="author">Имя <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" autocomplete="name" required /></p><p class="comment-form-email"><label for="email">Email <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" autocomplete="email" required /></p><p class="comment-form-url"><label for="url">Сайт</label> <input id="url" name="url" type="url" value="" size="30" maxlength="200" autocomplete="url" /></p><p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Отправить комментарий" /> <input type='hidden' name='comment_post_ID' value='14330' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /></p></form></div></div></main></div></div></div><footer id="colophon" class="site-footer row"><div class="site-info col-md-8"><p>© 2019 Штирлиц Сеть печатных салонов в Перми</p><p>Цифровая печать, цветное и черно-белое копирование документов, сканирование документов, ризография в Перми.</p></div><div class="col-md-4"> <a href="/sitemap.xml">Карта сайта</a></div></footer></div></div> <noscript><style>.lazyload{display:none}</style></noscript><script data-noptimize="1">window.lazySizesConfig=window.lazySizesConfig||{};window.lazySizesConfig.loadMode=1;</script><script async data-noptimize="1" src='https://schtirlitz.ru/wp-content/plugins/autoptimize/classes/external/js/lazysizes.min.js'></script> </body></html><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
Таблица 4-1. Набор символов Base64

Значение

Кодирование

Значение

Значение

Кодировка

0

A

17

R

34

1

B

18

S

35

j

52

19

T

36

k

53

1

3

D

л

54

2

4

E

21

55

3

5

F

22

W

39


56

39

6

G

23

40

o

57

5

7

H

п.

58

6

8

I

25

59

7

9

J

26

а

43


43


9139

10

K

27

b

44

s

61

9

11

L

45378

т

62

+

12

М

29

д

д

63

/

13

N

30

e

47

O

31

f

48

w

Прокладка

=

15

P

32


32

32

16

Q

33

h

50

78 9329 бит