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

Обновлено: 04.07.2024

Одну и ту же информацию можно представить и передать по-разному. В старинном телеграфе, например, информация кодировалась и передавалась с помощью азбуки Морзе – в виде последовательностей из точек и тире. В книгах и газетах информация передается в виде текстов и изображений. Фразу, закодированную точками и тире азбуки Морзе, можно напечатать буквами на пишущей машинке, произнести, передать жестами и т.д.

В современной вычислительной технике информация чаще всего кодируется с помощью последовательностей сигналов всего двух видов: намагничено или не намагничено, включено или не включено, высокое или низкое напряжение. Принято обозначать одно состояние цифрой 1, а другое – цифрой 0. Такое кодирование называют двоичным кодированием , а цифры 0 и 1 называют битами.

При двоичном кодировании текстовой информации для представления символа выделяется 1 байт (8 бит), тогда количество различных символов в наборе (размер таблицы кодирования) будет соответственно равно 2 8 = 256.

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

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

В последние годы вместо таблиц ASCII все чаще используется двухбайтовая кодировка (таблица) Unicode . В этой кодировке для каждого символа отводится не один, а два байта, т.е. шестнадцать бит. Таким образом, доступно 65536 (2 16 ) различных кодов. Этого хватит на латинский алфавит, кириллицу, иврит, африканские и азиатские языки, различные специализированные символы: математические, экономические, технические и многое другое.

Главный недостаток Unicode состоит в том, что все тексты в этой кодировке становятся в два раза длиннее. В настоящее время стандарты ASCII и Unicode мирно сосуществуют.

Составьте план текста:

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

Ответьте в тетради на следующие вопросы:

Что такое двоичное кодирование?

Назовите самую распространенную кодировку для однобайтовых кодов

Напишите название кодировки для двухбайтовых кодов

Сколько различных символов можно закодировать, если на один символ выделяется 1 байт?

Сколько различных символов можно закодировать, если на один символ выделяется 2 байта?

Двоичное кодирование графической информации

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

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

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

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


Для черно-белого изображения информационный объем одной точки равен одному биту (либо черная – 1, либо белая – 0). Два бита позволяют закодировать 4 оттенка точек: 00 – белый цвет, 01 – светло-серый, 10 – темно-серый, 11 – черный. Три бита позволяют закодировать 8 оттенков и т.д.

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

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

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

Объекты векторного изображения, в отличие от растровой графики, могут изменять свои размеры без потери качества (при увеличении растрового изображения увеличивается зернистость).

Составьте план текста:

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

Перерисуйте в тетрадь рисунок.

Ответьте в тетради на следующие вопросы:

Назовите способы кодирования компьютерной графики?

Назовите основные цвета, которые используются для многоцветного изображения

Из чего состоит растровое изображение?

Из чего состоит векторное изображение?

Двоичное кодирование звуковой информации

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

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


Поступим следующим образом. Будем измерять напряжение через равные промежутки времени и записывать полученные значения в память компьютера. Этот процесс называется дискретизацией (или оцифровкой), а устройство, выполняющее его - аналого-цифровым преобразователем (АЦП).

Для того чтобы воспроизвести закодированный таким образом звук, нужно выполнить обратное преобразование (для него служит цифро-аналоговый преобразователь - ЦАП), а затем сгладить получившийся ступенчатый сигнал.

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

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

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

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

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

Составьте план текста:

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

Перерисуйте в тетрадь рисунок.

Ответьте в тетради на следующие вопросы:

Что такое дискретизация звука?

На что влияет частота дискретизации?

Назовите самый распространенный формат звуковых файлов.

Похожие документы:

Двоичное кодирование текстовой информации (2)

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

Тема : Кодирование текстовой информации. Кодировка ascii. Основные кодировки кириллицы

. (базовый уровень, время – 1 мин) Тема: Кодирование текстовой информации. Кодировка ASCII. Основные кодировки кириллицы . шестнадцатеричную систему): (сначала перевели в двоичную систему, потом двоичную запись числа разбили на .

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

. текста в битах. 3. Двоичное кодирование текстовой информации Для кодирования одного символа требуется 1 байт информации. I = 1 . ошибка. 4. Двоичное кодирование графической информации Качество двоичного кодирования изображения определяется разрешающей .

Текстовый редактор это программа, предназначенная для: Ответ работы с текстовой информацией в процессе делопроизводства, редакционно-издательской деятельности и др. Ответ 2

. программа, предназначенная для: Ответ 1. работы с текстовой информацией в процессе делопроизводства, редакционно-издательской деятельности . формы Вопрос 35. двоичный код каждого символа при кодировании текстовой информации в ПК занимает в его .

1. Понятие информации. Виды информации. Роль информации в живой природе и в жизни людей. Язык как способ представления информации: естественные и формальные язы (2)

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

Когда мы читаем текст, нам кажется, что есть только один способ хранения текста в памяти — в виде букв (почему нет? :)). На самом деле существует множество кодировок, в которых текст может храниться и обрабатываться cpu. И далее я вкратце опишу самые распространенные из них:

ASCII

Интересное: CP-866 — это дефолтная кодировка консоли в Windows.

UNICODE

Unicode — это другая кодировка, которая появилась после ASCII. Коды в стандарте Юникод разделены на несколько областей. Область с кодами от U+0000 до U+007F содержит символы набора ASCII, и коды этих символов совпадают с их кодами в ASCII. Далее расположены области символов других систем письменности.

Первая версия Юникода (1991 г.) представляла собой 16-битную кодировку с фиксированной шириной символа; общее число разных символов было 2 16 ( 65 536 ). Сейчас же юникод имеет несколько форм представления: UTF-8, UTF-16 (UTF-16BE, UTF-16LE) и UTF-32 (UTF-32BE, UTF-32LE), где размер 1 символа может варьироваться.

UTF-8 — представление Юникода, обеспечивающее наибольшую компактность и обратную совместимость с 7-битной системой ASCII; текст, состоящий только из символов с номерами меньше 128, при записи в UTF-8 превращается в обычный текст ASCII и может быть отображён любой программой, работающей с ASCII; и наоборот, текст, закодированный 7-битной ASCII может быть отображён программой, предназначенной для работы с UTF-8. Остальные символы Юникода изображаются последовательностями длиной от 2 до 4 байт, в которых первый байт всегда имеет маску 11xxxxxx , а остальные — 10xxxxxx . В UTF-8 не используются суррогатные пары. Итого размер симола utf8 варьируется от 1 до 4 байт (то есть 1, 2, 3 или 4 байт). Является сегодня де-факто стандартом в web.

UTF-16

UTF-32

UTF-32 — способ представления Юникода, при котором каждый символ занимает ровно 4 байта. Главное преимущество UTF-32 перед кодировками переменной длины заключается в том, что символы Юникод в ней непосредственно индексируемы, поэтому найти символ по номеру его позиции в файле можно чрезвычайно быстро, и получение любого символа n-й позиции при этом является операцией, занимающей всегда одинаковое время. Это также делает замену символов в строках UTF-32 очень простой. Напротив, кодировки с переменной длиной требуют последовательного доступа к символу n-й позиции, что может быть очень затратной по времени операцией. Главный недостаток UTF-32 — это неэффективное использование пространства, так как для хранения любого символа используется четыре байта. Используется python для Linux систем.

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

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

В слове "информатика" 11 букв. Каждую букву мы можем закодировать одним байтом. В одном байте 8 бит, поэтому ответ 11х8=88.

Как это проверить? Очень просто, запустите на компьютере "Блокнот" (я предполагаю, что у вас Windows), напечатайте в нём это слово и сохраните в текстовый файл. Кликните правой кнопкой, выберите "свойства", видите? Размер: 11 байт (то есть 88 бит).

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

То есть кодировка, какому значению байта соответствует какая буква, это вовсе не универсальная штука, они бывают разные. В "Блокноте" и много где ещё в Windows используется кодировка Windows-1251 (это если вы в России живете, в других странах другие). В некоторых кодировках слово "информатика" просто нельзя записать. А в Windows-1251 нельзя записать слово 信息学. Если вы свой текстовый файлик, содержащий слово "информатика", пришлёте китайцу, он, открыв его, увидит какую-то абракадабру, и наоборот. Так что ответ "11 байт или 88 бит" предполагает, что мы с получателем используем одну и ту же однобайтовую кодировку, содержащую кириллические буквы.

А есть такой стандарт кодирования, в котором можно написать что угодно и не устраивать вот этих сложностей? Как ни странно, есть! Он называется Unicode, и в ней каждому символу всех алфавитов Земли (даже вымершим языкам, даже египетским иероглифам, даже смайликам и эмоджи) присвоен свой код. Естественно, в нём много тысяч символов и в один байт всё это не влезет. Unicode можно для компьютера кодировать по-разному, но самый популярный вариант устроен так. В нём самые распространенные символы (цифры, точки-запятые-скобки и буквы латинского алфавита) занимают один байт, чуть менее распространенные (кириллические буквы, а также всякие там Ä и π) два байта, а всякая экзотика вроде индейских узелковых письменностей и четыре может занимать.

С каждым годом Unicode становится всё более популярным, а "старые" кодировки вроде Windows 1251, господствовавшие, когда писался школьный учебник по информатике, уходят на второй план. Так что по-честному я бы ответил, что в слове "информатика" 22 байта = 176 бит, ну, насколько уж этот вопрос вообще имеет смысл.

Изучите кодировку символов в Java и узнайте о распространенных подводных камнях.

1. Обзор

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

2. Важность кодирования символов

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

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

Чтобы лучше понять это, давайте определим метод декодирования текста на Java:

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

Если мы запустим этот метод с input как “Шаблон фасада-это шаблоны проектирования программного обеспечения.” и кодировка как “US-ASCII” , он выведет:

Ну, не совсем то, что мы ожидали.

3. Основы

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

3.1. Кодирование

Компьютеры могут понимать только двоичные представления, такие как 1 и 0 . Обработка всего остального требует некоторого сопоставления текста реального мира с его двоичным представлением. Это отображение-то, что мы знаем как кодировка символов или просто как кодировка .

3.2. Кодировки

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

3.3. Кодовый пункт

Кодовая точка-это абстракция, которая отделяет символ от его фактической кодировки. A кодовая точка – это целочисленная ссылка на определенный символ.

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

4. Понимание Схем Кодирования

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

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

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

4.1. Однобайтовое кодирование

Одна из самых ранних схем кодирования, называемая ASCII (Американский стандартный код для обмена информацией), использует однобайтовую схему кодирования. По сути, это означает, что каждый символ в ASCII представлен семибитными двоичными числами. Это все еще оставляет один бит свободным в каждом байте!

Давайте определим простой метод в Java для отображения двоичного представления символа в определенной схеме кодирования:

Теперь символ ” T ” имеет кодовую точку 84 в US-ASCII (ASCII в Java называется US-ASCII).

И если мы используем наш метод утилиты, мы можем увидеть его двоичное представление:

Это, как мы и ожидали, семиразрядное двоичное представление символа “T”.

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

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

Было предложено и принято несколько вариантов схемы кодирования ASCII.

Многие расширения ASCII имели разные уровни успеха, но, очевидно, это

Одним из наиболее популярных расширений ASCII был ISO-8859-1 , также называемый “ISO Latin 1”.

4.2. Многобайтовое кодирование

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

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

BIG 5 и SHIFT-JIS являются примерами многобайтовых схем кодирования символов, которые начали использовать как один, так и два байта для представления более широких наборов символов . Большинство из них были созданы для того, чтобы представлять китайские и аналогичные сценарии, которые имеют значительно большее количество символов.

Давайте теперь вызовем метод convertToBinary с вводом как “語”, китайский символ, и кодирование как “Big5”:

Вывод выше показывает, что кодировка Big5 использует два байта для представления символа “語”.

полный список кодировок символов, наряду с их псевдонимами, ведется Международным органом по номерам.

5. Юникод

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

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

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

Ну, для этого должно потребоваться несколько байтов для хранения каждого символа? Честно говоря, да, но у Unicode есть гениальное решение.

Unicode как стандарт определяет кодовые точки для каждого возможного символа в мире. Кодовая точка для символа “T” в Юникоде равна 84 в десятичной системе счисления. Обычно мы называем это “U+0054” в Юникоде, который представляет собой не что иное, как U+, за которым следует шестнадцатеричное число.

Мы используем шестнадцатеричную систему в качестве основы для кодовых точек в Юникоде, поскольку существует 1 114 112 точек, что является довольно большим числом для удобной передачи в десятичном формате!

То, как эти кодовые точки кодируются в биты, зависит от конкретных схем кодирования в Юникоде. Мы рассмотрим некоторые из этих схем кодирования в подразделах ниже.

5.1. UTF-32

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

Давайте посмотрим, как простой символ, такой как “T”, представлен в UTF-32. Мы будем использовать метод преобразования в двоичный код , введенный ранее:

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

5.2. UTF-8

Давайте снова вызовем метод convertToBinary с вводом как “T” и кодированием как ” UTF-8″:

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

Давайте снова вызовем метод convertToBinary с вводом как “語” и кодированием как ” UTF-8″:

Как мы видим здесь, UTF-8 использует три байта для представления символа “語”. Это известно как кодирование переменной ширины .

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

6. Поддержка кодирования в Java

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

Это включает в себя US-ASCII, ISO-8859-1, UTF-8 и UTF-16, чтобы назвать некоторые из них. Конкретная реализация Java может дополнительно поддерживать дополнительные кодировки .

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

6.1. Кодировка по умолчанию

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

Это зависит от локали и кодировки базовой операционной системы, на которой работает JVM. Например, в macOS кодировка по умолчанию-UTF-8.

Давайте посмотрим, как мы можем определить кодировку по умолчанию:

Если мы запустим этот фрагмент кода на компьютере с Windows, то получим результат:

Теперь “windows-1252” – это кодировка по умолчанию платформы Windows на английском языке, которая в данном случае определила кодировку по умолчанию JVM, работающей в Windows.

6.2. Кто использует Кодировку по умолчанию?

Многие API Java используют кодировку по умолчанию, определенную JVM. Чтобы назвать несколько:

  • InputStreamReader и Средство чтения файлов
  • OutputStreamWriter и Файловая машина
  • Форматер и Сканер
  • URLEncoder и URLDecoder

Итак, это означает, что если бы мы запустили наш пример без указания кодировки:

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

И есть несколько API, которые делают этот же выбор по умолчанию.

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

6.3. Проблемы С Набором Символов По Умолчанию

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

Например, если мы запустим

в macOS он будет использовать UTF-8.

Если мы попробуем тот же фрагмент кода в Windows, он будет использовать Windows-1252 для декодирования того же текста.

Или представьте, что вы пишете файл в mac OS, а затем читаете тот же файл в Windows.

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

6.4. Можем ли мы переопределить кодировку по умолчанию?

Определение кодировки по умолчанию в Java приводит к двум системным свойствам:

  • file.encoding : Значение этого системного свойства является именем набора символов по умолчанию
  • sun.jnu.encoding : Значением этого системного свойства является имя набора символов, используемого при кодировании/декодировании путей к файлам

Теперь интуитивно понятно переопределять эти системные свойства с помощью аргументов командной строки:

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

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

6.5. Почему Java Не Решает Эту Проблему?

Существует предложение по улучшению Java (JEP), которое предписывает использовать “UTF-8” в качестве кодировки по умолчанию в Java вместо того, чтобы основывать ее на кодировке локали и операционной системы.

Этот ДЖИП находится в состоянии проекта на данный момент и когда он (надеюсь!) пройдя через него, мы решим большинство вопросов, которые мы обсуждали ранее.

Обратите внимание, что более новые API, такие как в файле java.nio.file.Файлы не используют кодировку по умолчанию. Методы в этих API-интерфейсах читают или записывают символьные потоки с кодировкой UTF-8, а не с кодировкой по умолчанию.

6.6. Решение Этой Проблемы в Наших Программах

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

К счастью, наш пример уже определяет кодировку. Нам просто нужно выбрать правильный, и пусть Java сделает все остальное.

К настоящему времени мы должны понять, что акцентированные символы, такие как “ç”, отсутствуют в схеме кодирования ASCII, и поэтому нам нужна кодировка, которая включает их. Может быть, UTF-8?

Давайте попробуем это сделать, теперь мы запустим метод decode Text с тем же вводом, но с кодировкой “UTF-8”:

Бинго! Мы можем увидеть результат, который мы надеялись увидеть.

Здесь мы установили кодировку, которая, по нашему мнению, лучше всего соответствует нашим потребностям в конструкторе InputStreamReader . Обычно это самый безопасный метод работы с символами и преобразованиями байтов в Java.

Аналогично, OutputStreamWriter и многие другие API поддерживают настройку схемы кодирования через свой конструктор.

6.7. Исключение MalformedInputException

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

Существует три предопределенные стратегии (или CodingErrorAction ), когда входная последовательность имеет искаженные входные данные:

  • ИГНОРИРОВАТЬ будет игнорировать искаженные символы и возобновит операцию кодирования
  • REPLACE заменит искаженные символы в выходном буфере и возобновит операцию кодирования
  • ОТЧЕТ вызовет исключение MalformedInputException

По умолчанию malformedInputAction для кодера CharsetDecoder является REPORT, и по умолчанию malformedInputAction декодера по умолчанию в InputStreamReader is REPLACE.

Давайте определим функцию декодирования , которая получает заданную кодировку , тип CodingErrorAction и строку, подлежащую декодированию:

Итак, если мы решим, что “Шаблон фасада-это шаблон проектирования программного обеспечения.” с помощью US_ASCII выходные данные для каждой стратегии будут разными. Во-первых, мы используем CodingErrorAction.ИГНОРИРОВАТЬ , который пропускает недопустимые символы:

Для второго теста мы используем CodingErrorAction.ЗАМЕНИТЕ , который помещает � вместо запрещенных символов:

Для третьего теста мы используем CodingErrorAction.ОТЧЕТ который приводит к выбрасыванию MalformedInputException:

7. Другие Места, Где Кодирование Важно

Нам не просто нужно учитывать кодировку символов при программировании. Тексты могут окончательно испортиться во многих других местах.

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

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

7.1. Текстовые Редакторы

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

7.2. Файловая система

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

7.3. Сеть

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

7.4. Базы данных

Большинство популярных баз данных, таких как Oracle и MySQL, поддерживают выбор схемы кодирования символов при установке или создании баз данных. Мы должны выбрать это в соответствии с текстами, которые мы ожидаем сохранить в базе данных. Это одно из наиболее частых мест, где повреждение текстовых данных происходит из-за преобразования кодировки.

7.5. Браузеры

Наконец, в большинстве веб-приложений мы создаем тексты и пропускаем их через различные слои с намерением просмотреть их в пользовательском интерфейсе, например в браузере. Здесь также важно, чтобы мы выбрали правильную кодировку символов, которая может правильно отображать символы. Большинство популярных браузеров, таких как Chrome, Edge, позволяют выбирать кодировку символов в своих настройках.

8. Заключение

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

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

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

Читайте также: