Известно, что Unicode использует способ кодирования символов с помощью 2-байтовой 16-битной мышиной клавиатуры

Обновлено: 21.11.2024

Обзор кодировок символов, используемых в Unreal Engine.

В этом документе представлен обзор кодировок символов, используемых Unreal.

Форматы текста

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

Это не технические определения форматов, а упрощенные версии, подходящие для этой страницы.

ASCII

Символы от 32 до 126 включительно, а также 0, 9, 10 и 13. (Текст P4) (это проверяется с помощью триггера P4 при регистрации)

ANSI

ASCII и текущая кодовая страница (например, западноевропейская высокая ASCII) должны храниться в двоичном виде на сервере P4.

UTF-8

Строка, состоящая из отдельных байтов, которая может использовать специальные последовательности символов для получения символов, отличных от ANSI. (расширенный набор ASCII) (Unicode типа P4)

UTF-16

Строка, состоящая из 2 байтов на символ со спецификацией. (хотя может идти до 4 байтов с астральными символами) (тип P4 UTF-16) (это проверяется с помощью триггера P4 при регистрации)

Пример двоичного файла

Плюсы

Минусы

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

Не объединяемые. Требует монопольного извлечения всех файлов этого типа.

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

P4 хранит каждую версию полностью, что может излишне увеличить размер хранилища.

Применение текста

Плюсы

Минусы

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

Очень ограничено; разрешены только символы ASCII.

Применение UTF-8

Плюсы

Минусы

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

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

Использует меньше памяти.

Юникод типа P4 не включен на нашем сервере Perforce.

Является надмножеством ASCII; обычная строка ASCII является абсолютно допустимой строкой UTF-8.

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

Все еще работает, когда игра определяет, что строка является ASCII, и выводит ее как таковую.

MSDev не очень хорошо обрабатывает что-либо, кроме ASCII, в азиатских регионах. Вот почему мы проверяем текст как ASCII во время регистрации.

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

Может определить, является ли строка кодировкой UTF-8, путем ее разбора (со спецификацией или без нее).

Применение UTF-16

Плюсы

Минусы

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

Используется больше памяти.

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

Трудно обнаружить этот формат, если у него нет спецификации.

Операции со строками могут разделяться/объединяться без разбора строк.

Не работает, когда игра определяет, что строка является ASCII, и выводит ее как таковую (теперь это обнаруживается при регистрации с помощью валидатора UTF-16).

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

MSDev не очень хорошо обрабатывает что-либо, кроме ASCII, в азиатских регионах. Вот почему мы проверяем текст как ASCII во время регистрации.

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

Внутреннее строковое представление UE4

Все строки в Unreal Engine 4 (UE4) хранятся в памяти в формате UTF-16 в виде массивов FString или TCHAR. В большинстве кодов предполагается, что 2 байта — это одна кодовая точка, поэтому поддерживается только базовая многоязычная плоскость (BMP), поэтому внутреннюю кодировку Unreal правильнее описывать как UCS-2. Строки хранятся с порядком байтов, соответствующим текущей платформе.

Текстовые файлы, загруженные UE4

Когда Unreal загружает внешний текстовый файл (например, чтение файла .INT во время выполнения), это почти всегда делается с помощью функции appLoadFileToString() из UnMisc.cpp. Основная работа происходит в функции appBufferToString().

Эта функция распознает метку порядка следования байтов (BOM) Unicode в файле UTF-16 и, если она присутствует, загрузит файл как UTF-16 с любым порядком байтов.

Что произойдет, если спецификация отсутствует, зависит от платформы.

В Windows он попытается преобразовать текст в UTF-16, используя кодировку Windows MBCS по умолчанию (например, Windows-1252 для английского языка США и Западной Европы, CP949 для корейского и CP932 для японского) и использует MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS . ). Это было добавлено в сборке QA за июль 2009 г.

Если это преобразование завершится ошибкой на платформах, отличных от Windows, будет просто считан каждый байт и дополнен до 16 бит, чтобы получился массив TCHAR.

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

Текстовые файлы, сохраненные Unreal

Большинство текстовых файлов, сгенерированных движком, будут сохранены с помощью appSaveStringToFile().

Рекомендуемая кодировка для текстовых файлов, используемых Unreal

Файлы INT и INI

UTF-16 с любым порядком байтов. Хотя кодировка MBCS по умолчанию для азиатского языка (например, CP932) будет работать в Windows, эти файлы необходимо загрузить на PS3 и Xbox360, а код преобразования работает только в Windows.

Исходный код

В целом мы не рекомендуем строковые литералы внутри исходного кода C++ и рекомендуем хранить эти данные в файлах INT.

Исходный код C++

UTF-8 или кодировка Windows по умолчанию. MSVC, компилятор Xbox360 и gcc должны работать с исходными файлами в кодировке UTF-8. Файлы в кодировке Latin-1 с символами с установленным старшим битом, например, авторскими правами, товарными знаками или символами степени, следует по возможности избегать в исходном коде, потому что кодировка не работает в системах с другими локалями. Некоторые случаи этого в стороннем программном обеспечении неизбежны (например, уведомления об авторских правах), поэтому для MSVC мы отключаем предупреждение 4819, которое в противном случае возникло бы при компиляции в азиатской Windows.

Сохранение текстовых файлов UTF-16 в Perforce

Не используйте «Текст»

Если файл UTF-x возвращен и сохранен как текст, он будет поврежден после синхронизации.

Если вы используете «Двоичный», пометьте файлы как монопольное извлечение

Люди могут проверить в ASCII, UTF-8, UTF-16, и это будет работать в движке.

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

Если вы используете 'UTF-16', убедитесь, что никто не проверяет файл, отличный от UTF-16

Тип 'Unicode' - это UTF-8, и здесь он нам не нужен.

Процедуры конверсии

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

Они используют следующие вспомогательные классы из UnStringConv.h:

typedef TStringConversion FANSIToTCHAR;

typedef TStringConversion FUTF8ToTCHAR;

Кроме того, при использовании TCHAR_TO_ANSI важно, чтобы количество байтов не совпадало с длиной строки TCHAR. Многобайтовые наборы символов могут потребовать несколько байтов на символ TCHAR. Если вам нужно знать длину результирующей строки в байтах, вы можете использовать вспомогательный класс вместо макросов. Например:

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

ToUpper() и ToLower() нетривиальны в Юникоде

В настоящее время UE4 поддерживает только ANSI (ASCII | кодовая страница 1252 | | Западноевропейская версия).

ISO/IEC 8859-1 для английского, французского, немецкого, итальянского, португальского и обоих испанских языков

ISO/IEC 8859-2 для польского, чешского и венгерского языков

ISO/IEC 8859-5 для русского языка

Примечания об исходном коде C++, характерном для восточноазиатских кодировок

Как кодировка UTF-8, так и кодировка Windows по умолчанию могут вызывать проблемы с компилятором C++, а именно:

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

Соблюдайте осторожность при компиляции исходного кода C++ в Windows с использованием однобайтовой кодовой страницы (например, CP437, США), если исходный код имеет двухбайтовую кодировку восточноазиатских символов, такую ​​как CP932 (японский), CP936 (упрощенный). китайский) или CP950 (традиционный китайский).

Эти восточноазиатские системы кодирования символов используют 0x81-0xFE для первого байта и 0x40-0xFE для второго байта. Значение 0x5C во втором байте будет интерпретироваться как обратная косая черта в ASCII/latin-1, и это имеет особое значение для C++. (Escape-последовательность внутри строкового литерала и продолжение строки, если оно используется в конце строки).
При компиляции этого исходного кода на однобайтовой кодовой странице Windows компилятор не заботится о восточноазиатском двухбайтовом символе. кодировку, и это может вызвать либо ошибку компиляции, либо, что еще хуже, создать ошибку в EXE-файле.

Однострочные комментарии:
Они могут вызвать трудно обнаруживаемые ошибки или ошибки, вызванные отсутствующей строкой, если в конце восточноазиатского комментария стоит 0x5c.

Внутри строкового литерала:
Это может привести к повреждению строки или ошибке с распознанной escape-последовательностью 0x5c.

Если символ, следующий за 0x5c, указывает escape-последовательность, компилятор преобразует набор символов escape-последовательности в один указанный символ.
(Если не указано, результат определяется реализацией, но MSVC удаляет 0x5c и предупреждает о «нераспознанной управляющей последовательности символов».)
В приведенном выше случае конец строки имеет обратную косую черту 0x5c, а затем является двойной кавычкой, поэтому управляющая последовательность \" преобразуется в двойную кавычку в строковых данных, и компилятор продолжает создавать строковые данные перед следующей двойной кавычкой или концом файла, что вызывает ошибку.

Примеры опасных символов:
CP932 (японский Shift-JIS) "?" равен 0x955C, и многие символы CP932 имеют 0x5C.
CP936 (упрощенный китайский GBK) "?" равен 0x815C, и многие символы CP936 имеют 0x5C.
CP950 (традиционный китайский Big5) "?" равно 0xA55C, и многие символы CP950 имеют 0x5C.
CP949 (корейский, EUC-KR) подходит, поскольку EUC-KR не использует 0x5C для второго байта.

UTF-8 без спецификации (некоторые текстовые редакторы описывают спецификацию как подпись)

Позаботьтесь о компиляции исходного кода C++ с восточноазиатской кодовой страницей CP949 (корейский), CP932 (японский), CP936 (упрощенный китайский) или CP950 (традиционный китайский) Windows, если этот исходный код содержит восточноазиатский символ, сохраненный как UTF. -8.

Кодировка символов UTF-8 использует три байта для восточноазиатских символов: 0xE0-0xEF для первого байта, 0x80-0xBF для второго байта и 0x80-0xBF для третьего байта. Без спецификации восточноазиатская кодировка Windows по умолчанию распознает три байта в кодировке UTF-8 и следующий байт как два 2-байтовых символа в восточноазиатской кодировке, пару первого и второго байтов для одного первого восточноазиатского символа, а третий байт и следующий байт, образующий второй восточноазиатский символ.
Проблемы могут возникнуть, если символ, следующий за тремя байтами в кодировке UTF-8, имеет особое значение в строковых литералах или комментариях.

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

Компилятор восточноазиатской кодовой страницы Windows распознает последний байт комментария восточноазиатского символа, декодированного UTF-8, и звездочку * как один восточноазиатский символ, а следующие символы рассматриваются как неизменная часть комментария. В приведенном выше случае компилятор удаляет Important_function(), так как он кажется частью комментария.
Такое поведение очень опасно, и трудно найти отсутствующий код.

В однострочном комментарии:
Использование обратной косой черты '\' в конце восточноазиатского комментария приводит к трудно находимым ошибкам или ошибкам без пропущенных строк.

Это очень редкий случай, потому что программисты не должны намеренно писать обратную косую черту '\' в конце комментариев.

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

Компилятор C++ для восточноазиатской кодовой страницы Windows интерпретирует последний байт строки восточноазиатских символов, расшифрованной UTF-8, и следующий символ как один восточноазиатский символ. Если вам повезет, предупреждение компилятора "C4819" (если не отключено) или ошибка предупредит вас о проблеме. Если не повезет, веревка порвется.

Заключение

Вы можете использовать UTF-8 или кодировку Windows по умолчанию для исходного кода C++, но помните об этой проблеме. Опять же, мы не рекомендуем строковые литералы внутри исходного кода C++. Обязательно используйте восточноазиатскую кодировку в качестве кодовой страницы по умолчанию, если вам нужно использовать восточноазиатскую кодировку символов в исходном коде C++.
Еще один хороший способ — использовать UTF-8 с спецификацией (некоторые текстовые редакторы описывают спецификацию как Подпись Юникод).

18 февраля 2010 г. мы протестировали несколько компиляторов с UTF-8 и UTF-16.

Perforce может работать как с UTF-16, так и с UTF-8, но p4 diff отображает спецификацию в файлах UTF-8 как видимый символ.

Я немного запутался в кодировках. Насколько я знаю, старые символы ASCII занимали один байт на символ. Сколько байтов требуется для символа Unicode?

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

А что означают UTF-7, UTF-6, UTF-16 и т. д.? Это разные версии Unicode?

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

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

"Простой ответ": символ Юникода занимает 1-4 байта. Юникод охватывает множество языков, но не все. В прошлый раз, когда я смотрел, например, клингон не был официальным набором символов Unicode.

Клингон не является частью самого стандарта Unicode, нет. Вместо этого используется зона частного использования Uniode (U+F8D0 - U+F8FF).

Спасибо, вопрос - спасибо.Моя ситуация заключается в хранении данных через LMS, совместимые со SCORM 1.2. стандарт для SCORM 1.2 'cmi.suspend_data' составляет 4096 байт данных, что, по предположению предыдущего разработчика, означает, что мы можем хранить 4096 символов. О, чувак, он ошибался - я только что обнаружил, почему наши закладки не работают на длинных курсах. Итак, теперь я знаю, что поскольку мы используем UTF-8, для каждого символа требуется 4 байта, что дает нам 1024 символа.

12 ответов 12

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

Итак, быстрый ответ: он занимает от 1 до 4 байтов, в зависимости от первого, который указывает, сколько байтов он займет.

Большое спасибо! Я просто просматривал стандарт IETF и ничего не нашел о кодировании, а в статье, которую я читал, не было достаточно подробностей, чтобы сказать, сколько битов используется для представления количества завершающего кода. баллов за "символ".

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

0xF4 был не ошибкой, а уточнением. Кодовые точки Unicode находятся в диапазоне 0–0x10ffff, поэтому последняя кодовая точка кодируется как F4 8F BF BF.

@DJPJ В принципе вы правы, но UTF-8 не использует все доступное пространство для совместимости с UTF-16.

Вы не увидите простого ответа, потому что его нет.

Во-первых, Unicode не содержит "каждый символ из каждого языка", хотя и пытается это сделать.

Юникод сам по себе является отображением, он определяет кодовые точки, а кодовая точка — это число, связанное обычно с символом. Я говорю обычно, потому что есть такие понятия, как объединение символов. Возможно, вы знакомы с такими вещами, как акценты или умляуты. Их можно использовать с другим символом, таким как a или u, для создания нового логического символа. Таким образом, символ может состоять из 1 или более кодовых точек.

Чтобы быть полезными в вычислительных системах, нам нужно выбрать представление для этой информации. Это различные кодировки Unicode, такие как utf-8, utf-16le, utf-32 и т. д. Они отличаются в основном размером своих кодовых единиц. UTF-32 — самая простая кодировка, она имеет 32-битную кодовую единицу, что означает, что отдельная кодовая точка удобно вписывается в кодовую единицу. В других кодировках будут ситуации, когда для кодовой точки потребуется несколько кодовых единиц или эта конкретная кодовая точка вообще не может быть представлена ​​в кодировке (это проблема, например, с UCS-2).

Из-за гибкости комбинирования символов даже в пределах данной кодировки количество байтов на символ может варьироваться в зависимости от символа и формы нормализации. Это протокол для работы с символами, которые имеют более одного представления (вы можете сказать «a» с акцентом, который представляет собой 2 кодовых точки, один из которых является комбинацией символов или «a» с ударением, который является одной кодовой точкой). ).

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

Вопрос

Что такое кодировка символов и зачем мне это?

Ответить

Во-первых, какое мне дело?

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

Например, вы можете сделать так, чтобы текст выглядел так:

но на самом деле это может выглядеть так:

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

Так что же такое кодировка символов?

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

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

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

Символы хранятся в компьютере как один или несколько .

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

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

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

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

Однако в большинстве случаев вам не нужно знать подробности. Вам просто нужно быть уверенным, что вы прислушаетесь к советам в разделе Как это на меня повлияет? ниже.

Как в это вписываются шрифты?

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

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

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

Как это влияет на меня?

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

Авторам контента необходимо выяснить, как объявить кодировку символов, используемую для формата документа, с которым они работают.

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

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

По приведенным ниже ссылкам можно найти дополнительную информацию по этим темам.

Дополнительная информация

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

Обратите внимание, что числа кодовых точек обычно выражаются в шестнадцатеричной системе счисления, т.е. основание 16. Например, 233 в шестнадцатеричной форме равно E9. Значения кодовой точки Unicode обычно записываются в форме U+00E9.

В наборе кодированных символов ISO 8859-1 (также известном как Latin1) значение десятичной кодовой точки для буквы é равно 233. Однако в ISO 8859-5 та же самая кодовая точка представляет кириллический символ щ .

Эти наборы символов содержат менее 256 символов и напрямую сопоставляют кодовые точки со значениями байтов, поэтому кодовая точка со значением 233 представлена ​​одним байтом со значением 233. Обратите внимание, что только контекст определяет, будет ли этот байт представляет либо é, либо sch .

Есть и другие способы обработки символов из ряда сценариев. Например, с помощью набора символов Unicode вы можете представлять оба символа в одном наборе. На самом деле Unicode содержит в одном наборе, вероятно, все символы, которые вам когда-либо понадобятся. В то время как буква é по-прежнему представлена ​​кодовой точкой 233, кириллический символ щ теперь имеет кодовую точку 1097.

В наши дни байты обычно состоят из 8 бит. Существует только 2 8 (т.е. 256) уникальных способов объединения 8 битов.

С другой стороны, 1097 — слишком большое число, чтобы его можно было представить одним байтом*. Итак, если вы используете кодировку символов для текста Unicode, называемую UTF-8, щ будет представлена ​​двумя байтами. Однако значение кодовой точки не просто получается из значения двух соединенных вместе байтов — требуется более сложное декодирование.

Другие символы Юникода соответствуют одному, трем или четырем байтам в кодировке UTF-8.

Кроме того, обратите внимание, что буква é также представлена ​​двумя байтами в UTF-8, а не одним байтом, который используется в ISO 8859-1. (Только символы ASCII кодируются одним байтом в UTF-8.)

UTF-8 — это наиболее широко используемый способ представления текста Unicode на веб-страницах, и вы всегда должны использовать UTF-8 при создании своих веб-страниц и баз данных. Но, в принципе, UTF-8 — это лишь один из возможных способов кодировки символов Юникода. Другими словами, одна кодовая точка в наборе символов Unicode может фактически отображаться в различные последовательности байтов, в зависимости от того, какая кодировка использовалась для документа. Кодовые точки Unicode могут быть сопоставлены с байтами с использованием любой из кодировок, называемых UTF-8, UTF-16 или UTF-32. Символ деванагари क с кодовой точкой 2325 (что равно 915 в шестнадцатеричной записи) будет представлен двумя байтами при использовании кодировки UTF-16 (09 15), тремя байтами при использовании UTF-8 (E0 A4 95) или четырьмя байтами. байт с кодировкой UTF-32 (00 00 09 15).

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

Дополнительная литература

Начинаете? Введение в наборы символов и кодировки — указывает на другие документы W3C, связанные с наборами символов и кодировками

Учебник, Работа с кодировками символов в HTML и CSS. Советы по выбору кодировки, ее объявлению и другим темам, связанным с HTML и CSS.

Настройка кодировки в веб-приложениях для разработки — как заставить ваш редактор сохранять в другой кодировке список сред редактирования.

Символ, обычно сокращенно обозначаемый как "char", представляет собой компьютерный символ, букву или число. [1] Клавиатура — это устройство ввода, которое вводит символ при нажатии клавиши. В Scratch символы используются в строках, аргументах и ​​любых ситуациях в редакторе Scratch или воспроизводимом проекте, где требуется текст.

Компьютеры используют наборы кодировок для представления символов. Поскольку компьютеры понимают только двоичный код, символы идентифицируются определенными двоичными последовательностями. В мире существует множество вариаций и стандартов, которые менялись на протяжении всей истории. [2]

Содержание

Типы персонажей

Письма

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

Символы

Эмодзи

Эмодзи – это небольшие изображения и смайлики, являющиеся частью технического стандарта Unicode [3], который применяется на большинстве компьютеров, телефонов и подобных устройств. Они являются распознаваемыми компьютерными символами и даже могут использоваться в названиях проектов и самих проектах (начиная с Scratch 3.0). В последнее десятилетие популярность смайликов резко возросла благодаря их забавному и визуальному характеру, а также легкому доступу на мобильных телефонах. Чтобы ввести эмодзи в проект, существуют различные способы:

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

В Windows 10 экранная клавиатура по умолчанию не поддерживает эмодзи. Однако есть вторая экранная клавиатура, называемая «Сенсорная клавиатура», которая поддерживает смайлики. Сенсорную клавиатуру можно использовать даже без сенсорного экрана; он поддерживает традиционную компьютерную мышь. Чтобы включить его, щелкните правой кнопкой мыши панель задач и выберите «Показать кнопку сенсорной клавиатуры». Оттуда значок сенсорной клавиатуры появится в правой части панели задач. На виртуальной клавиатуре кнопка «смайлик» отображает параметры эмодзи. Другой способ – нажать клавишу с логотипом Windows и клавишу с точкой, чтобы отобразить набор смайликов и каомодзи.

Числа

Числа также являются символами, часто используемыми для представления количества в контексте математических операций или в предложении. Отдельные числовые символы можно комбинировать для получения более крупных или более точных чисел. Основные числа находятся в диапазоне от «0» до «9». Десятичные числа часто используют "." символ для представления десятичной точки. В то время как "." сам по себе символ является символом, а не числом, его можно использовать с числом.

Непечатаемые символы

Некоторые символы "невидимы", так как компьютеры не отображают их на экране.[4] Примером этого является клавиша «escape». Другие примеры включают символ для клавиши «enter», клавиши «tab» и даже значения «null». Null — это не то, что имеет какое-либо визуальное представление, но важно в компьютерном программировании. В языке C символ "null" используется для обозначения конца строки.

Ограничения

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

Строки

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

Извлечение символа из строки

В Scratch буква () в блоке [] используется для извлечения одного символа из строки. Например, если необходимо получить первую букву слова «Hello World», в блок можно ввести аргументы, чтобы сформировать букву (1) слова [Hello World] .

Кодирование

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

ASCII

ASCII — это ограниченный набор символов из-за его истории. В прошлом компьютеры могли обрабатывать только до 8 бит, поэтому набор символов ASCII был ограничен 127 символами. В основном это были символы, наиболее связанные с английским языком. В следующей таблице приведены фрагменты некоторых символов из набора: [7]

Стандарты сопоставления

В разных странах разные символы ANSI представляют разные значения. Сама система кодирования (ANSI) использует ту же логику, но то, какие коды связаны с какими символами, различается. [9] Стандарт отображения — это метод определения кодов для желаемых символов. ISO-8859 и его варианты являются наиболее распространенными схемами сопоставления западных языков в ANSI. [10]

Ввод символов с клавиатуры

Клавиатуры имеют ограниченное количество символов. Если, например, кто-то хочет ввести символ «°», клавишу «alt» можно удерживать нажатой, пока «0176» набирается на правой цифровой клавиатуре клавиатуры. [11] «176» — это соответствующий код знака градуса в ANSI. Эта функция встроена в большинство клавиатур.

UTF-8 — это более современный стандарт, охватывающий более миллиона символов и не требующий обязательного использования нескольких байтов на символ. Стандарт можно использовать во всем мире, позволяя использовать китайские символы в том же тексте, что и испанские символы. [12] UTF-8 кодирует в определенные биты информацию о длине последовательности битов для представления символа. Например, если определенный символ имеет очень длинный код для представления самого себя, несколько битов будут действовать как «флажок», чтобы предупредить компьютер о том, что это более длинный символ. Затем компьютер будет учитывать следующий байт для одного символа.

Некоторые символы представлены в кодировке меньшим количеством байтов, чем другие. Таким образом, это позволяет файлам быть меньше по размеру, чем кодировка, которая обрабатывает каждый символ с одинаковым количеством байтов. Кодировка символов USC4 представляет все символы с 4 байтами. В то время как некоторые символы в UTF-8 могут быть представлены 4 байтами, многие представлены только 1 или 2. В следующей таблице показано количество байтов, необходимых для диапазона символов: [13]

Из-за этой настройки все исходные символы ASCII (0–127) по-прежнему занимают всего 1 байт в кодировке UTF-8. Наименее распространенные символы занимают большее количество байтов.

Другие варианты

Также существуют UTF-16 и UTF-32, но они менее распространены, чем UTF-8. UTF-16 использует минимум 16 бит или 2 байта для каждого символа. [14] Можно предположить, что это сделает файлы больше, чем UTF-8, но некоторые символы в символе UTF-8, которые представлены 3 байтами, могут быть представлены 2 байтами в UTF-16. Символ, представленный 16 битами в UTF-8, на самом деле занимает 3 байта, потому что некоторые биты используются для обозначения того, что необходимо несколько байтов. В UTF-16 16-битный символ может быть представлен 2 байтами.

Юникод

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

Юникод — это стандартизированный набор символов, в котором может храниться более миллиона символов. UTF-8 кодирует набор символов Unicode. Сам Unicode не указывает, как кодировать свои данные в двоичный код, это просто большая база данных кодовых значений многих символов. [15] Unicode постоянно пополняется новыми значениями, так как еще не все заполнено.

Использование в Scratch

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

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

UTF-8 также можно воспроизвести с помощью облачных переменных, используя некоторые цифры для представления того, сколько других цифр являются частью одного и того же символа перед переходом к следующему. Учтите, что первое число в облачной переменной означает, сколько следующих цифр составляет код следующего символа. Если закодированные данные облачной переменной — 3 564 2 98 , то код первого символа — «564», за которым следует «98». «3» означает, что в первом символе 3 цифры, а «2» означает, что во втором символе 2 цифры.

Тогда можно использовать список, где индекс соответствует коду символа. Этот тип системы был бы полезен, если проект должен распознавать большое количество символов. Ограничения можно установить, разрешив только определенные символы, используя более простую систему кодирования на основе ASCII с фиксированным количеством цифр на символ. Это, однако, может вызвать проблемы, если чье-то имя пользователя с «недопустимым» символом попытается закодировать в облачную переменную. Такие обстоятельства могли бы объясняться более сложной логикой.

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