Содержание

PostgreSQL : Документация: 13: 23.3. Поддержка кодировок : Компания Postgres Professional

23.3. Поддержка кодировок

Поддержка кодировок в PostgreSQL позволяет хранить текст в различных кодировках, включая однобайтовые кодировки, такие как входящие в семейство ISO 8859 и многобайтовые кодировки, такие как EUC (Extended Unix Code), UTF-8 и внутренний код Mule. Все поддерживаемые кодировки могут прозрачно использоваться клиентами, но некоторые не поддерживаются сервером (в качестве серверной кодировки). Кодировка по умолчанию выбирается при инициализации кластера базы данных PostgreSQL при помощи initdb. Она может быть переопределена при создании базы данных, что позволяет иметь несколько баз данных с разными кодировками.

Важным ограничением, однако, является то, что кодировка каждой базы данных должна быть совместима с параметрами локали базы данных LC_CTYPE (классификация символов) и LC_COLLATE (порядок сортировки строк). Для локали C или POSIX подойдёт любой набор символов, но для других локалей, предоставляемых библиотекой libc, есть только один набор символов, который будет работать правильно. (Однако в среде Windows кодировка UTF-8 может использоваться с любой локалью.) Если у вас включена поддержка ICU, локали, предоставляемые библиотекой ICU, можно использовать с большинством (но не всеми) кодировками на стороне сервера.

23.3.1. Поддерживаемые кодировки

Таблица 23.1 показывает кодировки, доступные для использования в PostgreSQL.

Таблица 23.1. Кодировки PostgreSQL

ИмяОписаниеЯзыкПоддержка на сервереICU?Байт на символПсевдонимы
BIG5Big FiveТрадиционные китайские иероглифыНетНет1–2WIN950, Windows950
EUC_CNExtended UNIX Code-CNУпрощённые китайские иероглифыДаДа1–3 
EUC_JPExtended UNIX Code-JPЯпонскийДаДа1–3 
EUC_JIS_2004Extended UNIX Code-JP, JIS X 0213ЯпонскийДаНет1–3 
EUC_KRExtended UNIX Code-KRКорейскийДаДа1–3 
EUC_TWExtended UNIX Code-TWТрадиционные китайские иероглифы, тайваньскийДаДа1–3 
GB18030Национальный стандартКитайскийНетНет1–4 
GBKРасширенный национальный стандартУпрощённые китайские иероглифыНетНет1–2WIN936, Windows936
ISO_8859_5ISO 8859-5, ECMA 113Латинский/КириллицаДаДа1 
ISO_8859_6ISO 8859-6, ECMA 114Латинский/АрабскийДаДа1 
ISO_8859_7ISO 8859-7, ECMA 118Латинский/ГреческийДаДа1 
ISO_8859_8ISO 8859-8, ECMA 121Латинский/ИвритДаДа1 
JOHABJOHABКорейский (Хангыль)НетНет1–3 
KOI8RKOI8-RКириллица (Русский)ДаДа1KOI8
KOI8UKOI8-UКириллица (Украинский)ДаДа1 
LATIN1ISO 8859-1, ECMA 94ЗападноевропейскиеДаДа1ISO88591
LATIN2ISO 8859-2, ECMA 94ЦентральноевропейскиеДаДа1ISO88592
LATIN3ISO 8859-3, ECMA 94ЮжноевропейскиеДаДа1ISO88593
LATIN4ISO 8859-4, ECMA 94СевероевропейскиеДаДа1ISO88594
LATIN5ISO 8859-9, ECMA 128ТурецкийДаДа1ISO88599
LATIN6ISO 8859-10, ECMA 144СкандинавскиеДаДа1ISO885910
LATIN7ISO 8859-13БалтийскиеДаДа1ISO885913
LATIN8ISO 8859-14КельтскиеДаДа1ISO885914
LATIN9ISO 8859-15LATIN1 c европейскими языками и диалектамиДаДа1ISO885915
LATIN10ISO 8859-16, ASRO SR 14111РумынскийДаНет1ISO885916
MULE_INTERNALВнутренний код MuleМультиязычный редактор EmacsДаНет1–4 
SJISShift JISЯпонскийНетНет1–2Mskanji, ShiftJIS, WIN932, Windows932
SHIFT_JIS_2004Shift JIS, JIS X 0213ЯпонскийНетНет1–2 
SQL_ASCIIне указан (см. текст)anyДаНет1 
UHCУнифицированный код ХангыльКорейскийНетНет1–2WIN949, Windows949
UTF8Unicode, 8-bitвсеДаДа1–4Unicode
WIN866Windows CP866КириллицаДаДа1ALT
WIN874Windows CP874ТайскийДаНет1 
WIN1250Windows CP1250ЦентральноевропейскиеДаДа1 
WIN1251Windows CP1251КириллицаДаДа1WIN
WIN1252Windows CP1252ЗападноевропейскиеДаДа1 
WIN1253Windows CP1253ГреческийДаДа1 
WIN1254Windows CP1254ТурецкийДаДа1 
WIN1255Windows CP1255ИвритДаДа1 
WIN1256Windows CP1256АрабскийДаДа1 
WIN1257Windows CP1257БалтийскиеДаДа1 
WIN1258Windows CP1258ВьетнамскийДаДа1ABC, TCVN, TCVN5712, VSCII

Не все клиентские API поддерживают все перечисленные кодировки. Например, драйвер интерфейса JDBC PostgreSQL не поддерживает MULE_INTERNAL, LATIN6, LATIN8 и LATIN10.

Поведение кодировки SQL_ASCII существенно отличается от других. Когда набором символов сервера является SQL_ASCII, сервер интерпретирует байтовые значения 0–127 согласно кодировке ASCII, тогда как значения 128–255 воспринимаются как незначимые. Перекодировка не будет выполнена при выборе SQL_ASCII. Таким образом, этот вариант является не столько объявлением того, что используется определённая кодировка, сколько объявлением того, что кодировка игнорируется. В большинстве случаев, если вы работаете с любыми данными, отличными от ASCII, не стоит использовать SQL_ASCII, так как PostgreSQL не сможет преобразовать или проверить символы, отличные от ASCII.

23.3.2. Настройка кодировки

initdb определяет кодировку по умолчанию для кластера PostgreSQL. Например,

initdb -E EUC_JP

настраивает кодировку по умолчанию на EUC_JP (Расширенная система кодирования для японского языка). Можно использовать --encoding вместо -E в случае предпочтения более длинных имён параметров. Если параметр -E или --encoding не задан, initdb пытается определить подходящую кодировку в зависимости от указанной или заданной по умолчанию локали.

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

createdb -E EUC_KR -T template0 --lc-collate=ko_KR.euckr --lc-ctype=ko_KR.euckr korean

Это создаст базу данных с именем korean, которая использует кодировку EUC_KR и локаль

ko_KR. Также, получить желаемый результат можно с помощью данной SQL-команды:

CREATE DATABASE korean WITH ENCODING 'EUC_KR' LC_COLLATE='ko_KR.euckr' LC_CTYPE='ko_KR.euckr' TEMPLATE=template0;

Заметьте, что приведённые выше команды задают копирование базы данных template0. При копировании любой другой базы данных, параметры локали и кодировку исходной базы изменить нельзя, так как это может привести к искажению данных. Более подробное описание приведено в Разделе 22.3.

Кодировка базы данных хранится в системном каталоге pg_database. Её можно увидеть при помощи параметра psql

-l или команды \l.

$ psql -l
                                         List of databases
   Name    |  Owner   | Encoding  |  Collation  |    Ctype    |          Access Privileges          
-----------+----------+-----------+-------------+-------------+-------------------------------------
 clocaledb | hlinnaka | SQL_ASCII | C           | C           | 
 englishdb | hlinnaka | UTF8      | en_GB.UTF8  | en_GB.UTF8  | 
 japanese  | hlinnaka | UTF8      | ja_JP.UTF8  | ja_JP.UTF8  | 
 korean    | hlinnaka | EUC_KR    | ko_KR.euckr | ko_KR.euckr | 
 postgres  | hlinnaka | UTF8      | fi_FI.UTF8  | fi_FI.UTF8  | 
 template0 | hlinnaka | UTF8      | fi_FI.UTF8  | fi_FI.UTF8  | {=c/hlinnaka,hlinnaka=CTc/hlinnaka}
 template1 | hlinnaka | UTF8      | fi_FI.
UTF8 | fi_FI.UTF8 | {=c/hlinnaka,hlinnaka=CTc/hlinnaka} (7 rows)

Важно

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

PostgreSQL позволит суперпользователям создавать базы данных с кодировкой SQL_ASCII, даже когда значение LC_CTYPE не установлено в C или POSIX. Как было сказано выше, SQL_ASCII не гарантирует, что данные, хранящиеся в базе, имеют определённую кодировку, и таким образом, этот выбор чреват сбоями, связанными с локалью. Использование данной комбинации устарело и, возможно, будет полностью запрещено.

23.3.3. Автоматическая перекодировка между сервером и клиентом

PostgreSQL поддерживает автоматическое перекодирование символов между сервером и клиентов для многих сочетаний кодировок (они перечисляются в Подразделе 23.3.4).

Чтобы включить автоматическую перекодировку символов, необходимо сообщить PostgreSQL кодировку, которую вы хотели бы использовать на стороне клиента. Это можно выполнить несколькими способами:

  • Использование команды \encoding в psql. \encoding позволяет оперативно изменять клиентскую кодировку. Например, чтобы изменить кодировку на SJIS, введите:

    \encoding SJIS
  • libpq (Раздел 33.10) имеет функции, для управления клиентской кодировкой.

  • Использование SET client_encoding TO. Клиентская кодировка устанавливается следующей SQL-командой:

    SET CLIENT_ENCODING TO 'value';

    Также, для этой цели можно использовать стандартный синтаксис SQL SET NAMES:

    SET NAMES 'value';

    Получить текущую клиентскую кодировку:

    SHOW client_encoding;

    Вернуть кодировку по умолчанию:

    RESET client_encoding;
  • Использование PGCLIENTENCODING. Если установлена переменная окружения PGCLIENTENCODING, то эта клиентская кодировка выбирается автоматически при подключении к серверу. (В дальнейшем это может быть переопределено при помощи любого из методов, указанных выше.)

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

Если перекодировка определённого символа невозможна (предположим, выбраны EUC_JP для сервера и LATIN1 для клиента, и передаются некоторые японские иероглифы, не представленные в LATIN1), возникает ошибка.

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

23.3.4. Возможные перекодировки наборов символов

PostgreSQL поддерживает перекодирование между любыми двумя наборами символов, для которых в системном каталоге pg_conversion присутствует функция перекодирования. PostgreSQL включает несколько предопределённых перекодировок, сведённых в Таблице 23.2 и описанных подробнее в Таблице 23.3. Кроме этого, есть возможность создать новую перекодировку, используя SQL-команду CREATE CONVERSION. (Чтобы она использовалась для автоматического перекодирования текста между сервером и клиентом, она должна быть помечена как перекодировка «по умолчанию» для своей пары кодировок.)

Таблица 23.2. Встроенные клиент-серверные перекодировки наборов символов

Серверная кодировкаДоступные клиентские кодировки
BIG5не поддерживается как серверная кодировка
EUC_CNEUC_CN, MULE_INTERNAL, UTF8
EUC_JPEUC_JP, MULE_INTERNAL, SJIS, UTF8
EUC_JIS_2004EUC_JIS_2004, SHIFT_JIS_2004, UTF8
EUC_KREUC_KR, MULE_INTERNAL, UTF8
EUC_TWEUC_TW, BIG5, MULE_INTERNAL, UTF8
GB18030не поддерживается как серверная кодировка
GBKне поддерживается как серверная кодировка
ISO_8859_5ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, WIN866, WIN1251
ISO_8859_6ISO_8859_6, UTF8
ISO_8859_7ISO_8859_7, UTF8
ISO_8859_8ISO_8859_8, UTF8
JOHABне поддерживается как серверная кодировка
KOI8RKOI8R, ISO_8859_5, MULE_INTERNAL, UTF8, WIN866, WIN1251
KOI8UKOI8U, UTF8
LATIN1LATIN1, MULE_INTERNAL, UTF8
LATIN2LATIN2, MULE_INTERNAL, UTF8, WIN1250
LATIN3LATIN3, MULE_INTERNAL, UTF8
LATIN4LATIN4, MULE_INTERNAL, UTF8
LATIN5LATIN5, UTF8
LATIN6LATIN6, UTF8
LATIN7LATIN7, UTF8
LATIN8LATIN8, UTF8
LATIN9LATIN9, UTF8
LATIN10LATIN10, UTF8
MULE_INTERNALMULE_INTERNAL, BIG5, EUC_CN, EUC_JP, EUC_KR, EUC_TW, ISO_8859_5, KOI8R, LATIN1 to LATIN4, SJIS, WIN866, WIN1250, WIN1251
SJISне поддерживается как серверная кодировка
SHIFT_JIS_2004не поддерживается как серверная кодировка
SQL_ASCIIлюбая (перекодировка не будет выполнена)
UHCне поддерживается как серверная кодировка
UTF8все поддерживаемые кодировки
WIN866WIN866, ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, WIN1251
WIN874WIN874, UTF8
WIN1250WIN1250, LATIN2, MULE_INTERNAL, UTF8
WIN1251WIN1251, ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, WIN866
WIN1252WIN1252, UTF8
WIN1253WIN1253, UTF8
WIN1254WIN1254, UTF8
WIN1255WIN1255, UTF8
WIN1256WIN1256, UTF8
WIN1257WIN1257, UTF8
WIN1258WIN1258, UTF8

Таблица 23. 3. Все встроенные перекодировки наборов символов

Имя преобразованияИсходная кодировкаЦелевая кодировка
big5_to_euc_twBIG5EUC_TW
big5_to_micBIG5MULE_INTERNAL
big5_to_utf8BIG5UTF8
euc_cn_to_micEUC_CNMULE_INTERNAL
euc_cn_to_utf8EUC_CNUTF8
euc_jp_to_micEUC_JPMULE_INTERNAL
euc_jp_to_sjisEUC_JPSJIS
euc_jp_to_utf8EUC_JPUTF8
euc_kr_to_micEUC_KRMULE_INTERNAL
euc_kr_to_utf8EUC_KRUTF8
euc_tw_to_big5EUC_TWBIG5
euc_tw_to_micEUC_TWMULE_INTERNAL
euc_tw_to_utf8EUC_TWUTF8
gb18030_to_utf8GB18030UTF8
gbk_to_utf8GBKUTF8
iso_8859_10_to_utf8LATIN6UTF8
iso_8859_13_to_utf8LATIN7UTF8
iso_8859_14_to_utf8LATIN8UTF8
iso_8859_15_to_utf8LATIN9UTF8
iso_8859_16_to_utf8LATIN10UTF8
iso_8859_1_to_micLATIN1MULE_INTERNAL
iso_8859_1_to_utf8LATIN1UTF8
iso_8859_2_to_micLATIN2MULE_INTERNAL
iso_8859_2_to_utf8LATIN2UTF8
iso_8859_2_to_windows_1250LATIN2WIN1250
iso_8859_3_to_micLATIN3MULE_INTERNAL
iso_8859_3_to_utf8LATIN3UTF8
iso_8859_4_to_micLATIN4MULE_INTERNAL
iso_8859_4_to_utf8LATIN4UTF8
iso_8859_5_to_koi8_rISO_8859_5KOI8R
iso_8859_5_to_micISO_8859_5MULE_INTERNAL
iso_8859_5_to_utf8ISO_8859_5UTF8
iso_8859_5_to_windows_1251ISO_8859_5WIN1251
iso_8859_5_to_windows_866ISO_8859_5WIN866
iso_8859_6_to_utf8ISO_8859_6UTF8
iso_8859_7_to_utf8ISO_8859_7UTF8
iso_8859_8_to_utf8ISO_8859_8UTF8
iso_8859_9_to_utf8LATIN5UTF8
johab_to_utf8JOHABUTF8
koi8_r_to_iso_8859_5KOI8RISO_8859_5
koi8_r_to_micKOI8RMULE_INTERNAL
koi8_r_to_utf8KOI8RUTF8
koi8_r_to_windows_1251KOI8RWIN1251
koi8_r_to_windows_866KOI8RWIN866
koi8_u_to_utf8KOI8UUTF8
mic_to_big5MULE_INTERNALBIG5
mic_to_euc_cnMULE_INTERNALEUC_CN
mic_to_euc_jpMULE_INTERNALEUC_JP
mic_to_euc_krMULE_INTERNALEUC_KR
mic_to_euc_twMULE_INTERNALEUC_TW
mic_to_iso_8859_1MULE_INTERNALLATIN1
mic_to_iso_8859_2MULE_INTERNALLATIN2
mic_to_iso_8859_3MULE_INTERNALLATIN3
mic_to_iso_8859_4MULE_INTERNALLATIN4
mic_to_iso_8859_5MULE_INTERNALISO_8859_5
mic_to_koi8_rMULE_INTERNALKOI8R
mic_to_sjisMULE_INTERNALSJIS
mic_to_windows_1250MULE_INTERNALWIN1250
mic_to_windows_1251MULE_INTERNALWIN1251
mic_to_windows_866MULE_INTERNALWIN866
sjis_to_euc_jpSJISEUC_JP
sjis_to_micSJISMULE_INTERNAL
sjis_to_utf8SJISUTF8
windows_1258_to_utf8WIN1258UTF8
uhc_to_utf8UHCUTF8
utf8_to_big5UTF8BIG5
utf8_to_euc_cnUTF8EUC_CN
utf8_to_euc_jpUTF8EUC_JP
utf8_to_euc_krUTF8EUC_KR
utf8_to_euc_twUTF8EUC_TW
utf8_to_gb18030UTF8GB18030
utf8_to_gbkUTF8GBK
utf8_to_iso_8859_1UTF8LATIN1
utf8_to_iso_8859_10UTF8LATIN6
utf8_to_iso_8859_13UTF8LATIN7
utf8_to_iso_8859_14UTF8LATIN8
utf8_to_iso_8859_15UTF8LATIN9
utf8_to_iso_8859_16UTF8LATIN10
utf8_to_iso_8859_2UTF8LATIN2
utf8_to_iso_8859_3UTF8LATIN3
utf8_to_iso_8859_4UTF8LATIN4
utf8_to_iso_8859_5UTF8ISO_8859_5
utf8_to_iso_8859_6UTF8ISO_8859_6
utf8_to_iso_8859_7UTF8ISO_8859_7
utf8_to_iso_8859_8UTF8ISO_8859_8
utf8_to_iso_8859_9UTF8LATIN5
utf8_to_johabUTF8JOHAB
utf8_to_koi8_rUTF8KOI8R
utf8_to_koi8_uUTF8KOI8U
utf8_to_sjisUTF8SJIS
utf8_to_windows_1258UTF8WIN1258
utf8_to_uhcUTF8UHC
utf8_to_windows_1250UTF8WIN1250
utf8_to_windows_1251UTF8WIN1251
utf8_to_windows_1252UTF8WIN1252
utf8_to_windows_1253UTF8WIN1253
utf8_to_windows_1254UTF8WIN1254
utf8_to_windows_1255UTF8WIN1255
utf8_to_windows_1256UTF8WIN1256
utf8_to_windows_1257UTF8WIN1257
utf8_to_windows_866UTF8WIN866
utf8_to_windows_874UTF8WIN874
windows_1250_to_iso_8859_2WIN1250LATIN2
windows_1250_to_micWIN1250MULE_INTERNAL
windows_1250_to_utf8WIN1250UTF8
windows_1251_to_iso_8859_5WIN1251ISO_8859_5
windows_1251_to_koi8_rWIN1251KOI8R
windows_1251_to_micWIN1251MULE_INTERNAL
windows_1251_to_utf8WIN1251UTF8
windows_1251_to_windows_866WIN1251WIN866
windows_1252_to_utf8WIN1252UTF8
windows_1256_to_utf8WIN1256UTF8
windows_866_to_iso_8859_5WIN866ISO_8859_5
windows_866_to_koi8_rWIN866KOI8R
windows_866_to_micWIN866MULE_INTERNAL
windows_866_to_utf8WIN866UTF8
windows_866_to_windows_1251WIN866WIN
windows_874_to_utf8WIN874UTF8
euc_jis_2004_to_utf8EUC_JIS_2004UTF8
utf8_to_euc_jis_2004UTF8EUC_JIS_2004
shift_jis_2004_to_utf8SHIFT_JIS_2004UTF8
utf8_to_shift_jis_2004UTF8SHIFT_JIS_2004
euc_jis_2004_to_shift_jis_2004EUC_JIS_2004SHIFT_JIS_2004
shift_jis_2004_to_euc_jis_2004SHIFT_JIS_2004EUC_JIS_2004

23.

3.5. Дополнительные источники информации

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

Обработка информации на китайском, японском, корейском & вьетнамском языках.

Содержит подробные объяснения по EUC_JP, EUC_CN, EUC_KR, EUC_TW.

https://www.unicode.org/

Сайт Unicode Consortium.

RFC 3629

UTF-8 (формат преобразования 8-битного UCS/Unicode) определён здесь.

sql: преобразование из cp1251 в utf8



Как скомпилировать запрос SQL, который преобразует столбец таблицы из cp1251 в utf8 . Моя база данных и все таблицы в ней с кодировкой utf8, но информация внутри на cp1251. Из-за этого информация отображается некорректно. Простое изменение кодировки в настройках превращает их в другие непонятные символы. Я пытался изменить DEFAULT CHARESET в дампе, но это тоже не помогло 🙁 может быть, есть другие методы?

Часть базы данных:

Я так и сделал:

  1. туздышпр -у mysql -п conference_db —позвольте-ключевые слова-создать-опции-в комплекте-вставка —default-character-set=utf8 по —add-drop-table > dump. sql

  2. Все … CHARESET по умолчанию=utf8 по умолчанию изменен на … CHARESET=кодировкой cp1251 (на создание таблицы)

  3. mysql -u mysql -p conference_db —default-character-set=cp1251 < dump.sql

mysql sql unicode converter character-set
Поделиться Источник Eugene Kotov     13 февраля 2018 в 20:51

2 ответа


  • Преобразование между ISO-8559-1 и cp1251

    Мое приложение Android использует библиотеку с открытым исходным кодом, которая принимает только текстовые данные в кодировке ISO-8859-1. У меня есть несколько пользователей из Восточной Европы, которые хотели бы ввести кодированный cp1251 текст. Это, по-видимому, является ограничением библиотеки…

  • php: преобразование из cp1251 в utf8

    У меня есть проблема с преобразованием строки из cp1251 в utf8.

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



0

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

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

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

здесь «Mojibake», какие ошибки вызывают это.

Для получения помощи в восстановлении данных, пожалуйста, предоставьте SHOW CREATE TABLE и SELECT HEX(col) ... , чтобы мы могли увидеть, что у вас есть. («колонка из cp1251» неоднозначна).

Поделиться Rick James     17 февраля 2018 в 02:48



0

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

Однако вы можете преобразовать набор символов столбца-нарушителя в оператор SELECT с помощью операции CONVERT : CONVERT(column USING utf8)

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

 INSERT INTO new_table
 SELECT journal_id, locale, setting_name, 
        CONVERT(setting_value USING utf8) setting_value
        setting_type
   FROM table

Поделиться O. Jones     13 февраля 2018 в 22:15


Похожие вопросы:


Java: преобразование строки UTF8 в массив байтов в другой кодировке

У меня есть строка в кодировке UTF8, но мне нужно опубликовать параметры для процесса выполнения в cp1251. Как я могу декодировать строку или байтовый массив? Мне нужно что-то вроде:. bytesInCp1251…


Как преобразовать cp1251 в utf-8 программно в Java?

Возможный Дубликат : Преобразование кодировки в java На самом деле мне нужен пример, метод преобразования из кодировки cp1251 в utf-8 в Java. Например, у меня не болит голова в PHP с этим вопросом…


Преобразование файла из cp1251 в utf8

Я видел подобные вопросы, но ответы на них не помогли. Настоящий кодекс: with codecs.open( sourceFileName, r, sourceEncoding, ) as sourceFile: contents = sourceFile.read() with codecs.open(…


Преобразование между ISO-8559-1 и cp1251

Мое приложение Android использует библиотеку с открытым исходным кодом, которая принимает только текстовые данные в кодировке ISO-8859-1. У меня есть несколько пользователей из Восточной Европы,…


php: преобразование из cp1251 в utf8

У меня есть проблема с преобразованием строки из cp1251 в utf8… Мне нужно получить некоторые имена из базы данных, и эти имена находятся в cp1251(я не тот, кто создал эту базу данных, поэтому я не…


Как преобразовать utf8 в cp1251 для записи тега ID3_V1 файла mp3?

ID3_V1 поддерживает только кодировку latin1 . Для того, чтобы написать В1 теги с русскими символами, используется кодирование cp1251 является. Я хотел бы скопировать данные из тегов V2 (unicode) в…


Преобразование кодировки элемента DOM из CP1251 в UTF-8

У меня есть простой серверный код, который принимает запрос xml и вставляет его в виде строки в столбец Clob базы данных Oracle. Проблема в том, что клиентская сторона отправляет запрос xml с…


ocaml преобразовать строку в кодировке utf8 на cp1251

Помогите мне написать правильный код, мне нужно преобразовать строку из utf8 в cp1251. Использование библиотеки Uutf. мой код не работает let str = русский текст in let decode =…


Python (запросы) проблема кодирования (UTF-8-CP1251)

Я пытаюсь получить такой вид URL http://example.com/?param=%DD%CC%C0-15 с расширением requests python, как это: group = ЭМА-15.encode(‘cp1251’) r = requests.get(‘http://example.com/?param=’ + group)…


PHP строка преобразование кодировки из utf8 в cp1251 с заменой невозможных символов через html-мнемоника

Я преобразую строковое кодирование из широкого utf8 в ограниченное кодирование cp1251 .

Мне нужно сохранить некоторые символы, не включенные в cp1251. В python 2.x есть специальная функция, которая…

Урок 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

Кодировки


Разрабатывая просмотрщик текста в кодировке Win1251, нативной поддержки которой так не хватает Android-платформе, я поймал себя на мысли, что использую этот класс:
  1. public class StringEncoder

  2. {

  3.     protected static char[] cp1251 =

  4.     {

  5.         ‘\u0410’, ‘\u0411’, ‘\u0412’, ‘\u0413’, ‘\u0414’, ‘\u0415’, ‘\u0416’,

  6.         ‘\u0417’, ‘\u0418’, ‘\u0419’, ‘\u041A’, ‘\u041B’, ‘\u041C’, ‘\u041D’,

  7.         ‘\u041E’, ‘\u041F’, ‘\u0420’, ‘\u0421’, ‘\u0422’, ‘\u0423’, ‘\u0424’,

  8.         ‘\u0425’, ‘\u0426’, ‘\u0427’, ‘\u0428’, ‘\u0429’, ‘\u042A’, ‘\u042B’,

  9.         ‘\u042C’, ‘\u042D’, ‘\u042E’, ‘\u042F’, ‘\u0430’, ‘\u0431’, ‘\u0432’,

  10.         ‘\u0433’, ‘\u0434’, ‘\u0435’, ‘\u0436’, ‘\u0437’, ‘\u0438’, ‘\u0439’,

  11.         ‘\u043A’, ‘\u043B’, ‘\u043C’, ‘\u043D’, ‘\u043E’, ‘\u043F’, ‘\u0440’,

  12.         ‘\u0441’, ‘\u0442’, ‘\u0443’, ‘\u0444’, ‘\u0445’, ‘\u0446’, ‘\u0447’,

  13.         ‘\u0448’, ‘\u0449’, ‘\u044A’, ‘\u044B’, ‘\u044C’, ‘\u044D’, ‘\u044E’,

  14.         ‘\u044F’

  15.     };

  16.  

  17.     public static char decodeCharCP1251 (byte b)

  18.     {

  19.         int ich = b & 0xff;

  20.         if (ich == 0xb8) // ё

  21.             return 0x0451;

  22.         else if (ich == 0xa8) // Ё

  23.             return 0x0401;

  24.         else if (ich >= 0xc0)

  25.             return cp1251[ich-192];

  26.         return (char)ich;

  27.     }

  28. }

Корни этого класса уходят в далёкий 2005 год, когда некий VMX создавал SieFM. 8 лет прошло, а этот класс еще используется в моих программах. Пора бы отправить его на заслуженный отдых! Напишем собственный класс, который будет поддерживать не только Win1251, но и DOS (CP-866), KOI8-R и еще кучу других кодировок. Поехали!

  Существует понятие кодовая страница (code page) — это таблица соответствия каждому байту определённого символа. Символов у нас максимум 65536 (в unicode), а байт имеет лишь 255 значений, поэтому как ни крути, а все символы мы в один байт не закинем. Потому то и существуют различные кодировки. И для каждой кодировки существует своя кодовая таблица.
  Вот, пример кодовых таблиц двух кодировок: Win1251 и KOI8-R.
 
Как видно, отличаются они лишь 128 байтами (от 0x80 до 0xFF). Это всё потому, что значения от 0 до 127 (0x7F) постоянны (стандарт ASCII). То есть, для реализации однобайтовой кодировки, нам нужно заполнить таблицу из 128 значений символов, соответствующих каждому байту с 0x80 по 0xFF. Чтобы не загромождать классы кучей массивов, информацию будем считывать из файла.

  Вот класс для Java SE, который создаёт кодовые таблицы для всех поддерживаемых кодировок.
  CodepageCreator.java

  Для загрузки файлов из папки assets, нам понадобится класс CharsetLoader

Открыть спойлер

Закрыть спойлер

  1. public class CharsetLoader {

  2.  

  3.     private static AssetManager assets;

  4.  

  5.     public static void setAssetManager(AssetManager assets) {

  6.         CharsetLoader.assets = assets;

  7.     }

  8.  

  9.     public static char[] getCodepage(String charsetName) throws IOException {

  10.         String assetPath = charsetName + «.cp»;

  11.  

  12.         DataInputStream dis = new DataInputStream( assets.open(assetPath) );

  13.         char[] codepage = new char[0x80];

  14.         for (int i = 0; i < codepage.length; i++) {

  15.             codepage[i] = dis. readChar();

  16.         }

  17.         dis.close();

  18.  

  19.         return codepage;

  20.     }

  21. }

Теперь декодировать байт можно вот этой функцией:

  1. public final char decodeChar(byte signedByte) {

  2.     int unsigned = signedByte & 0xff;

  3.  

  4.     int charIndex = unsigned — 0x80;

  5.     if ( (0 <= charIndex) && (charIndex < codepage.length) ) {

  6.         return codepage[charIndex];

  7.     }

  8.  

  9.     return (char) unsigned;

  10.  }

К тому же можно выполнить и обратную операцию — закодировать символ в байт:
  1. public final byte encodeChar(char ch) {

  2.     if ( (0 <= ch) && (ch < 0x80) ) return (byte) ch;

  3.  

  4.     for (int i = 0; i < codepage.length; i++) {

  5.         if (ch == codepage[i]) return (byte) (i + 0x80);

  6.     }

  7.  

  8.     return (byte) ch;

  9. }

 
  Осталось только написать класс, который кодирует/декодирует не символы, а целые строки/массивы байт.
  Класс StringCoder

Открыть спойлер

Закрыть спойлер

  1. public class StringCoder {

  2.  

  3.     public static byte[] encodeString(String s, String enc) throws UnsupportedEncodingException {

  4.         byte[] bs;

  5.         try {

  6.             bs = s.getBytes(enc);

  7.         } catch (UnsupportedEncodingException x) {

  8.             Charset charset = new Charset(enc);

  9.             charset.loadCodepage();

  10.  

  11.             bs = new byte[s.length()];

  12.             for (int i = 0; i < s.length(); i++) {

  13.                 bs[i] = charset.encodeChar(s.charAt(i));

  14.             }

  15.         }

  16.         return bs;

  17.     }

  18.  

  19.     public static String decodeString(byte[] bs, String enc) throws UnsupportedEncodingException {

  20.         try {

  21.             return new String(bs, enc);

  22.         } catch (UnsupportedEncodingException x) {

  23.             Charset charset = new Charset(enc);

  24.             charset. loadCodepage();

  25.  

  26.             StringBuilder sb = new StringBuilder();

  27.             for (int i = 0; i < bs.length; i++) {

  28.                 sb.append( charset.decodeChar(bs[i]) );

  29.             }

  30.             return sb.toString();

  31.         }

  32.     }

  33. }


Пример использования:
  1. InputStream is = …

  2. ByteArrayOutputStream baos = new ByteArrayOutputStream();

  3. int oneByte;

  4. while ((oneByte = is.read()) != -1) {

  5.     baos.write((byte) oneByte);

  6. }

  7. baos.flush();

  8. is.close();

  9.  

  10. text = StringCoder.decodeString(baos.toByteArray(), «CP1251»);

  11. }


Готовые проекты с исходниками:
  CodepageCreator (Java SE)
  Encodings (Android)

Поделиться

Другие статьи автора


Лабораторная работа № 3.

Аддитивные шифры

ЛАБОРАТОРНАЯ РАБОТА № 3. АДДИТИВНЫЕ ШИФРЫ

 

В аддитивных шифрах используется сложение по модулю (mod) исходного сообщения с гаммой, представленных в числовом виде. Напомним, что результатом сложения двух целых чисел по модулю является остаток от деления (например, 5+10 mod 4 = 15 mod 4 = 3).

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

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

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

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

Ci = (Pi + Ki) mod N,          (4)

Pi = (Ci + N — Ki) mod N,          (5)

где Pi, Ci — i-ый символ открытого и шифрованного сообщения;

N — количество символов в алфавите;

Кi — i-ый символ гаммы (ключа). Если длина гаммы меньше, чем длина сообщения, то она используется повторно.

Данные формулы позволяют выполнить зашифрование / расшифрование по Виженеру при замене букв алфавита числами согласно следующей таблице (применительно к русскому алфавиту):

Рис.21. Таблица кодирования символов

Например, для шифрования используется русский алфавит (N = 33), открытое сообщение – «АБРАМОВ», гамма – «ЖУРИХИН». При замене символов на числа буква А будет представлена как 0, Б – 1, …, Я – 32. Результат шифрования показан в следующей таблице.

Таблица 2. Пример аддитивного шифрования по модулю N

Сложение по модулю 2. Является частным случаем предыдущего шифра и используется при шифровании в автоматизированных системах. Символы текста и гаммы представляются в двоичных кодах, а затем каждая пара двоичных разрядов складывается по модулю 2 (, для булевых величин аналог этой операции – XOR, «Исключающее ИЛИ»). Процедуры шифрования и дешифрования выполняются по следующим формулам

Ci = Pi Ki,          (6)

Pi = Ci Ki.          (7)

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

Таблица 3. Коды символов Windows 1251 и их двоичное представление

Примечание. Dec-код – десятичный код символа, Bin-код – двоичный код символа.

Пример шифрования сообщения «ВОВА» с помощью гаммы «ЮЛЯ» показан в следующей таблице.

Таблица 4. Пример аддитивного шифрования по модулю 2

Задание на лабораторную работу.

В лабораторной работе необходимо зашифровать свою фамилию с помощью шифров гаммирования по модулю N и модулю 2.

При оформлении отчета необходимо привести исходное сообщение (фамилию), гамму и таблицы зашифрования/дешифрования.


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

Краткая история кодировок от ASCII до UTF-8 – POPEL Agency

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

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

Однако торжество современных технологий — явление относительно новое. Согласно Google, самой распространенной в интернете кодировкой UTF-8 стала только в 2008 году — тогда ее использовали чуть более чем 25% проиндексированных веб-страниц. А еще в 2006 UTF-8 использовали менее чем 10% веб-страниц.

График изменения популярности кодировок в интернете.

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

ASCII

А начнем мы с возникновения кодировки ASCII, которую в середине двухтысячных и начала вытеснять собой из интернета кодировка UTF-8.

ASCII (англ. American Standard Code for Information Interchange) — американская стандартная кодировочная таблица для печатных символов и некоторых специальных кодов. В американском варианте английского языка произносится [э́ски], тогда как в Великобритании чаще произносится [а́ски]; по-русски произносится также [а́ски] или [аски́].

— Статья об ASCII на Википедии

Кодировка ASCII была разработана в 1963 году Американской Ассоциацией Стандартов (которая позже стала Американским Национальным Институтом Стандартов — ANSI), впоследствии несколько раз обновлялась — в 1967 и 1986 годах. ASCII — 7-битная кодировка, включающая в себя 128 символов: 33 непечатных управляющих символа (влияющих на обработку текста и пробелов) и 95 печатных символов, включая цифры, буквы латинского алфавита в строчном и прописном вариантах и ряд пунктуационных символов.

Таблица кодов символов в ASCII.

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

ISO/IEC 646

По этой причине в 1972 году началась разработка группы кодировок, основанных на ASCII, где редко используемые символы из ASCII заменялись на необходимые. Группа включала в себя варианты кодировки для Канады, Китая, Кубы, Германии, Дании, Финляндии, Франции, Великобритании, Греции, Венгрии, Ирландии, Японии, Южной Кореи, Мальты, Норвегии, Швеции и Югославии.

Стандартизация кодировок группы позволила свести различия между кодировками разных стран к минимуму.

KOI8

Естественно, СССР не остался в стороне, разработав в 1974 году свою кодировку — KOI8 (Код Обмена Информацией, 8 бит). Как следует из названия, это была 8-битная кодировка, что позволяло включить в нее в два раза больше символов. KOI8 включала в себя цифры, буквы латинского и русского алфавита, а также знаки пунктуации, спецсимволы и псевдографику.

Таблица кодов символов в KOI8-R.

Эта кодировка существует в нескольких вариантах для разных кириллических алфавитов, в частности: KOI8-R — для русского алфавита, и KOI8-U — для украинского. Кодировки KOI8 стали одними из самых популярных в русском сегменте интернет до распространения UTF-8.

ISO/IEC 8859

Ранние кодировки были ограничены 7 битами из-за особенностей некоторых протоколов передачи данных. Однако со временем эти ограничения свою актуальность потеряли, в то время как необходимость в дополнительных символах для языков, использующих латинский алфавит, только росла. Поэтому в середине 80-х началась работа над группой 8-битных кодировок, получившей название ISO/IEC 8859. Все кодировки этой группы были основаны на ASCII. Помимо расширения диапазона доступных символов за счет восьмого бита, на печатные символы была заменена часть устаревших к тому моменту непечатных управляющих символов.

Здесь стоит отметить две кодировки из группы. Первая — ISO-8859-1 — была опубликована в 1987 году. Она включала в себя так называемый «Латинский алфавит номер 1» (сокращенно Latin-1), состоящий из 191 символа латинского письма. Этот набор символов используется по всей Северной и Южной Америке, в Западной Европе, Океании и на большей части Африки. Кодировка ISO-8859-1 стала основой для наиболее популярных 8-битных кодировок.

В 1988 году была опубликована ISO-8859-5. Она была создана для работы с кириллическими языками. Включенные в эту кодировку символы обеспечивали полную поддержку русского, белорусского, болгарского, сербского и македонского языков. А вот для полной поддержки украинского языка ей не хватало буквы «ґ». Особого распространения эта кодировка не получила, но интересен сам факт разработки кириллической кодировки в рамках группы кодировок ISO/IEC.

Windows-125x

В начале 90-х годов компания Microsoft разработала группу кодировок для ОС Windows. Среди прочих хочется отметить две кодировки: Windows-1251 и Windows-1252.

Windows-1251 была разработана на базе «самодельных» кодировок для русификаторов Windows при участии российской компании-разработчика ПО «ПараГраф» и СП «Диалог» — совместного советско-американского предприятия в области вычислительной техники. В эту кодировку вошли все символы русского и близких к нему языков: украинского, белорусского, болгарского, сербского и македонского. На практике этого оказалось достаточно, чтобы кодировка Windows-1251 закрепилась в интернете вплоть до распространения UTF-8.

Таблица кодов символов в Windows-1251.

Windows-1252 была разработана на основе кодировки ISO-8859-1 путем замены ряда непечатных контрольных символов на печатные (в частности, символ евро, ряд пунктуационных и несколько других символов). Сходство этих двух кодировок часто приводило к неверному отображению текста, когда вместо новых символов из Windows-1252 отображались знаки вопроса. Эта ситуация была настолько частой, что многие почтовые клиенты для отображения писем кодировки ISO-8859-1 стали использовать Windows-1252. В конечном итоге такое поведение было внесено в спецификацию HTML 5 в качестве требования.

Переходный период

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

Интересно, что в KOI8-R русский алфавит был расположен не в алфавитном порядке: позиции символов русского алфавита соответствовали их фонетическим аналогам в английском алфавите. Таким образом, при интерпретации кодировки текста как 7-битной, русский текст превращался в некое подобие транслита. Например, слова «Русский Текст» превратились бы в «rUSSKIJ tEKST».

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

UTF-8

Впервые кодировка UTF-8 была официально представлена на конференции USENIX в Сан Диего в январе 1993. От других мультибайтных кодировок ее отличала полная совместимость с ASCII: все символы ASCII в UTF-8 кодируются 7 битами. Каждый символ кодировки, отличный от ASCII, состоит из ведущего байта, указывающего длину последовательности, и одного или нескольких продолжающих байт. Такой принцип позволяет определить длину последовательности только по первому байту. Коды символов ASCII, ведущих и продолжающих байт не пересекаются, что позволяет легко найти начало последовательности простым откатом назад максимум на пять байт.

В ноябре 2003 года стандартом RFC-3629 максимальная длина последовательности UTF-8 была ограничена четырьмя байтами, однако потенциально UTF-8 позволяет использовать последовательности вплоть до шести байт.

Принцип кодирования

У всех однобайтных символов старший бит кода установлен в 0 и полностью совпадает с кодом символа в ASCII:

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

Такой подход создает несколько символьных диапазонов разной величины. Первый диапазон использует 7 бит и кодирует до 128 символов. Второй диапазон использует 11 бит и кодирует до 2 048 символов. Третий и четвертый диапазоны используют 16 бит и 21 бит соответственно и позволяют кодировать до 65 536 и 2 097 152 соответственно. В сумме все четыре диапазона значений позволяют кодировать до 2 164 864 символов.

 

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

PHP: get_html_translation_table — Manual

ISO-8859-1ISO8859-1 Западно-европейская Latin-1.
ISO-8859-5ISO8859-5 Редко используемая кириллическая кодировка (Latin/Cyrillic).
ISO-8859-15ISO8859-15 Западно-европейская Latin-9. Добавляет знак евро, французские и финские буквы к кодировке Latin-1 (ISO-8859-1).
UTF-8  8-битная Unicode, совместимая с ASCII.
cp866ibm866, 866 Кириллическая кодировка, применяемая в DOS.
cp1251Windows-1251, win-1251, 1251 Кириллическая кодировка, применяемая в Windows.
cp1252Windows-1252, 1252 Западно-европейская кодировка, применяемая в Windows.
KOI8-Rkoi8-ru, koi8r Русская кодировка.
BIG5950 Традиционный китайский, применяется в основном на Тайване.
GB2312936 Упрощённый китайский, стандартная национальная кодировка.
BIG5-HKSCS  Расширенная Big5, применяемая в Гонконге.
Shift_JISSJIS, SJIS-win, cp932, 932 Японская кодировка.
EUC-JPEUCJP, eucJP-win Японская кодировка.
MacRoman  Кодировка, используемая в Mac OS.
''  Пустая строка активирует режим определения кодировки из файла скрипта (Zend multibyte), default_charset и текущей локали (см. nl_langinfo() и setlocale()) в указанном порядке. Не рекомендуется к использованию.

PostgreSQL: Документация: 9.3: Поддержка набора символов

Поддержка набора символов в PostgreSQL позволяет хранить текст в множество наборов символов (также называемых кодировками), включая однобайтовые наборы символов, такие как серия ISO 8859 и многобайтовые наборы символов, такие как EUC (Extended Unix Code), UTF-8 и Mule внутренний код. Можно использовать все поддерживаемые наборы символов. прозрачно для клиентов, но некоторые из них не поддерживаются для использования внутри сервера (то есть как кодирование на стороне сервера).По умолчанию набор символов выбирается при инициализации кластера базы данных PostgreSQL с помощью initdb. Его можно переопределить при создании база данных, поэтому у вас может быть несколько баз данных с разными набор символов.

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

Таблица 22-1 показывает наборы символов, доступные для использования в PostgreSQL.

Таблица 22-1. PostgreSQL Наборы символов

Имя Описание Язык Сервер? байт / символ Псевдонимы
BIG5 Большая пятерка Традиционный китайский Нет 1-2 WIN950, Windows950
EUC_CN Расширенный код UNIX — CN Упрощенный китайский Есть 1-3
EUC_JP Расширенный код UNIX-JP Японский Есть 1-3
EUC_JIS_2004 Расширенный код UNIX-JP, JIS X 0213 Японский Есть 1-3
EUC_KR Расширенный код UNIX-KR Корейский Есть 1-3
EUC_TW Расширенный код UNIX-TW Традиционный китайский, Тайваньский Есть 1-3
ГБ18030 Национальный стандарт китайский Нет 1-4
ГБК Расширенный национальный стандарт Упрощенный китайский Нет 1-2 WIN936, Windows936
ISO_8859_5 ISO 8859-5, ECMA 113 Латиница / кириллица Есть 1
ISO_8859_6 ISO 8859-6, ECMA 114 Латинский / арабский Есть 1
ISO_8859_7 ISO 8859-7, ECMA 118 Латинский / греческий Есть 1
ISO_8859_8 ISO 8859-8, ECMA 121 Латиница / Иврит Есть 1
JOHAB JOHAB Корейский (хангыль) Нет 1-3
KOI8R КОИ8-Р Кириллица (русская) Есть 1 КОИ8
КОИ8У КОИ8-У Кириллица (украинская) Есть 1
ЛАТИН 1 ISO 8859-1, ECMA 94 Западноевропейская Есть 1 ISO88591
ЛАТИН 2 ISO 8859-2, ECMA 94 Центральноевропейская Есть 1 ISO88592
ЛАТИН 3 ISO 8859-3, ECMA 94 Южноевропейский Есть 1 ISO88593
ЛАТИН 4 ISO 8859-4, ECMA 94 Северо-Европейский Есть 1 ISO88594
LATIN5 ISO 8859-9, ECMA 128 Турецкий Есть 1 ISO88599
LATIN6 ISO 8859-10, ECMA 144 Nordic Есть 1 ISO885910
LATIN7 ISO 8859-13 Балтика Есть 1 ISO885913
ЛАТИН 8 ISO 8859-14 кельтский Есть 1 ISO885914
ЛАТИН 9 ISO 8859-15 LATIN1 с евро и акцентами Есть 1 ISO885915
ЛАТИН 10 ISO 8859-16, ASRO SR 14111 Румынский Есть 1 ISO885916
MULE_INTERNAL Мул внутренний код Многоязычный Emacs Есть 1-4
SJIS Сдвиг JIS Японский Нет 1-2 Мсканджи, ShiftJIS, WIN932, Окна932
SHIFT_JIS_2004 Сдвиг JIS, JIS X 0213 Японский Нет 1-2
SQL_ASCII не указано (см. Текст) любая Есть 1
UHC Единый код хангыль Корейский Нет 1-2 WIN949, Windows949
UTF8 Unicode, 8-бит все Есть 1-4 Юникод
WIN866 Окна CP866 Кириллица Есть 1 ALT
WIN874 Окна CP874 Тайский Есть 1
WIN1250 Окна CP1250 Центральноевропейская Есть 1
WIN1251 Окна CP1251 Кириллица Есть 1 ВЫИГРАТЬ
WIN1252 Окна CP1252 Западноевропейская Есть 1
WIN1253 Окна CP1253 Греческий Есть 1
WIN1254 Окна CP1254 Турецкий Есть 1
WIN1255 Окна CP1255 Еврейский Есть 1
WIN1256 Окна CP1256 Арабский Есть 1
WIN1257 Окна CP1257 Балтика Есть 1
WIN1258 Окна CP1258 Вьетнамский Есть 1 ABC, TCVN, TCVN5712, VSCII

Не все клиентские API поддерживают все перечисленные наборы символов. Например, драйвер PostgreSQL JDBC не поддерживает MULE_INTERNAL, LATIN6, LATIN8 и ЛАТИНСКИЙ 10.

Параметр SQL_ASCII ведет себя значительно отличается от других настроек. Когда сервер набор символов — SQL_ASCII, сервер интерпретирует байтовые значения 0-127 в соответствии со стандартом ASCII, а байтовые значения 128–255 считаются неинтерпретируемыми символами. Нет преобразование кодировки будет выполнено, если установлено значение SQL_ASCII. Таким образом, этот параметр не так уж и хорош. объявление, что используется определенная кодировка, как объявление незнание кодировки.В большинстве случаев, если вы работаете с любыми данными, отличными от ASCII, неразумно использовать параметр SQL_ASCII, потому что PostgreSQL не сможет вам помочь преобразование или проверка символов, отличных от ASCII.

initdb определяет символ по умолчанию установить (кодировку) для PostgreSQL кластер. Например,

 initdb -E EUC_JP 

устанавливает набор символов по умолчанию на EUC_JP (расширенный код Unix для японского языка). Ты можешь используйте —encoding вместо -E, если вы предпочитаете более длинные строки параметров. Если нет -E или —encoding задана опция, initdb пытается определить подходящую кодировку для использования на основе указанного или языковой стандарт по умолчанию.

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

createdb -E EUC_KR -T template0 --lc-collate = ko_KR.euckr --lc-ctype = ko_KR.euckr корейский 

Это создаст базу данных с именем korean, которая использует набор символов EUC_KR и локаль ko_KR. Другой способ добиться этого — использовать эту команду SQL:

СОЗДАТЬ БАЗУ ДАННЫХ корейский С КОДИРОВАНИЕМ 'EUC_KR' LC_COLLATE = 'ko_KR.euckr' LC_CTYPE = 'ko_KR.euckr 'TEMPLATE = template0; 

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

Кодировка для базы данных хранится в системном каталоге. pg_database. Вы можете увидеть это, используя параметр psql -l или команда \ l.

 $  psql -l 
                                         Список баз данных
   Имя | Владелец | Кодирование | Сопоставление | Ctype | Привилегии доступа
----------- + ---------- + ----------- + ------------- + - ------------ + -------------------------------------
 clocaledb | хлиннака | SQL_ASCII | C | C |
 englishdb | хлиннака | UTF8 | en_GB.UTF8 | en_GB.UTF8 |
 японский | хлиннака | UTF8 | ja_JP.UTF8 | ja_JP.UTF8 |
 корейский | хлиннака | EUC_KR | ko_KR.euckr | ko_KR.euckr |
 postgres | хлиннака | UTF8 | fi_FI.UTF8 | fi_FI.UTF8 |
 template0 | хлиннака | UTF8 | fi_FI.UTF8 | fi_FI.UTF8 | {= c / hlinnaka, hlinnaka = CTc / hlinnaka}
 template1 | хлиннака | UTF8 | fi_FI.UTF8 | fi_FI.UTF8 | {= c / hlinnaka, hlinnaka = CTc / hlinnaka}
(7 рядов) 

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

PostgreSQL позволит суперпользователи для создания баз данных с кодировкой SQL_ASCII, даже если LC_CTYPE не C или POSIX. Как отмечалось выше, SQL_ASCII не требует, чтобы данные, хранящиеся в база данных имеет какую-либо конкретную кодировку, поэтому этот выбор ставит риски ненадлежащего поведения, зависящего от местных условий.Используя эту комбинацию настройки устарели и когда-нибудь могут быть полностью запрещены.

PostgreSQL поддерживает автоматический преобразование набора символов между сервером и клиентом наверняка комбинации наборов символов. Информация о преобразовании хранится в системный каталог pg_conversion. PostgreSQL поставляется с некоторыми предопределенные преобразования, как показано в Таблице 22-2. Ты может создать новое преобразование с помощью команды SQL CREATE CONVERSION.

Таблица 22-2. Преобразование набора символов клиент / сервер

Набор символов сервера Доступные клиентские наборы символов
BIG5 не поддерживается в качестве сервера кодировка
EUC_CN EUC_CN, MULE_INTERNAL, UTF8
EUC_JP EUC_JP, MULE_INTERNAL, SJIS, UTF8
EUC_JIS_2004 EUC_JIS_2004, SHIFT_JIS_2004, UTF8
EUC_KR EUC_KR, MULE_INTERNAL, UTF8
EUC_TW EUC_TW, BIG5, MULE_INTERNAL, UTF8
ГБ18030 не поддерживается в качестве сервера кодировка
ГБК не поддерживается в качестве сервера кодировка
ISO_8859_5 ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, WIN866, WIN1251
ISO_8859_6 ISO_8859_6, UTF8
ISO_8859_7 ISO_8859_7, UTF8
ISO_8859_8 ISO_8859_8, UTF8
JOHAB не поддерживается в качестве сервера кодировка
KOI8R KOI8R, ISO_8859_5, MULE_INTERNAL, UTF8, WIN866, WIN1251
КОИ8У КОИ8У, UTF8
ЛАТИН 1 LATIN1, MULE_INTERNAL, UTF8
ЛАТИН 2 LATIN2, MULE_INTERNAL, UTF8, WIN1250
ЛАТИН 3 LATIN3, MULE_INTERNAL, UTF8
ЛАТИН 4 LATIN4, MULE_INTERNAL, UTF8
LATIN5 LATIN5, UTF8
LATIN6 LATIN6, UTF8
LATIN7 LATIN7, UTF8
ЛАТИН 8 LATIN8, UTF8
ЛАТИН 9 LATIN9, UTF8
ЛАТИН 10 LATIN10, UTF8
MULE_INTERNAL MULE_INTERNAL, BIG5, EUC_CN, EUC_JP, EUC_KR, EUC_TW, ISO_8859_5, KOI8R, LATIN1 в LATIN4, SJIS, WIN866, WIN1250, WIN1251
SJIS не поддерживается в качестве сервера кодировка
SHIFT_JIS_2004 не поддерживается в качестве сервера кодировка
SQL_ASCII любой (конвертации не будет выполнено)
UHC не поддерживается в качестве сервера кодировка
UTF8 все поддерживаются кодировки
WIN866 WIN866, ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, WIN1251
WIN874 WIN874, UTF8
WIN1250 WIN1250, LATIN2, MULE_INTERNAL, UTF8
WIN1251 WIN1251, ISO_8859_5, KOI8R, MULE_INTERNAL, UTF8, WIN866
WIN1252 WIN1252, UTF8
WIN1253 WIN1253, UTF8
WIN1254 WIN1254, UTF8
WIN1255 WIN1255, UTF8
WIN1256 WIN1256, UTF8
WIN1257 WIN1257, UTF8
WIN1258 WIN1258, UTF8

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

  • Использование команды \ encoding в psql. \ encoding позволяет изменять кодировку клиента на муха. Например, чтобы изменить кодировку на SJIS, введите:

     \ кодировка SJIS 
  • libpq (Раздел 31.10) имеет функции для управления клиентская кодировка.

  • Использование SET client_encoding TO. Параметр кодирование клиента может быть выполнено с помощью этой команды SQL:

     УСТАНОВИТЬ CLIENT_ENCODING TO 'значение'; 

    Также вы можете использовать стандартный синтаксис SQL SET ИМЕНА для этого:

     УСТАНОВИТЬ ИМЕНА 'значение'; 

    Для запроса текущей клиентской кодировки:

     ПОКАЗАТЬ client_encoding; 

    Для возврата к кодировке по умолчанию:

     СБРОС client_encoding; 
  • Использование PGCLIENTENCODING.Если переменная среды PGCLIENTENCODING — это определенная в клиентской среде, эта клиентская кодировка автоматически выбирается при подключении к серверу. (Впоследствии это можно изменить с помощью любого из других методов. упомянуто выше.)

  • Использование переменной конфигурации client_encoding. Если установлена ​​переменная client_encoding, эта клиентская кодировка выбирается автоматически при подключении к сервер сделан. (Впоследствии это может быть отменено с помощью любого других методов, упомянутых выше.)

Если преобразование определенного символа невозможно — предположим, вы выбрали EUC_JP для сервера и LATIN1 для клиента, а некоторые Возвращаются японские символы, которые не имеют представления в LATIN1 — сообщается об ошибке.

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

Это хорошие источники для начала изучения различных видов системы кодирования.

CJKV Обработка информации: китайский, Вычислительная техника в Японии, Корее и Вьетнаме

Содержит подробные объяснения EUC_JP, EUC_CN, EUC_KR, EUC_TW.

http://www.unicode.org/

Веб-сайт Консорциума Unicode.

RFC 3629

UTF-8 (8-битный UCS / Unicode Формат преобразования) определяется здесь.

windows-1251.txt

windows-1251.txt
#
# Имя: cp1251 в таблицу Unicode
# Версия Unicode: 2.0
# Версия таблицы: 2.01
# Формат таблицы: Формат A
# Дата: 15.04.98
#
# Контакт: [email protected]
#
# Общие примечания: нет
#
# Формат: три столбца, разделенных табуляцией
# Столбец # 1 - это код cp1251 (в шестнадцатеричном формате)
# Столбец # 2 - это Unicode (в шестнадцатеричном виде 0xXXXX)
# Столбец # 3 - это имя Unicode (после знака комментария '#')
#
# Записи в порядке cp1251
#
0x00 0x0000 # ПУСТО
0x01 0x0001 # НАЧАЛО ЗАГОЛОВКИ
0x02 0x0002 # НАЧАЛО ТЕКСТА
0x03 0x0003 # КОНЕЦ ТЕКСТА
0x04 0x0004 # КОНЕЦ ПЕРЕДАЧИ
0x05 0x0005 # ЗАПРОС
0x06 0x0006 # ПОДПИСАТЬСЯ
0x07 0x0007 # БЕЛЛ
0x08 0x0008 #BACKSPACE
0x09 0x0009 # ГОРИЗОНТАЛЬНАЯ ТАБЛИЦА
0x0A 0x000A # ЛИНИЯ ПОДАЧИ
0x0B 0x000B # ВЕРТИКАЛЬНАЯ ТАБЛИЦА
0x0C 0x000C # ФОРМА ПОДАЧИ
0x0D 0x000D # ВОЗВРАТ ЗАРЯДА
0x0E 0x000E # ПЕРЕМЕЩЕНИЕ
0x0F 0x000F #SHIFT IN
0x10 0x0010 # ОТКЛЮЧЕНИЕ СВЯЗИ ДАННЫХ
0x11 0x0011 # УПРАВЛЕНИЕ УСТРОЙСТВОМ ОДИН
0x12 0x0012 # УПРАВЛЕНИЕ УСТРОЙСТВОМ ДВА
0x13 0x0013 # УПРАВЛЕНИЕ УСТРОЙСТВОМ ТРИ
0x14 0x0014 # УПРАВЛЕНИЕ УСТРОЙСТВОМ ЧЕТВЕРТОЕ
0x15 0x0015 # ОТРИЦАТЕЛЬНОЕ ПОДТВЕРЖДЕНИЕ
0x16 0x0016 # СИНХРОННЫЙ ПРОХОЖДЕНИЕ
0x17 0x0017 # КОНЕЦ БЛОКА ПЕРЕДАЧИ
0x18 0x0018 # ОТМЕНА
0x19 0x0019 # КОНЕЦ СРЕДЫ
0x1A 0x001A # ПОДСТАВИТЬ
0x1B 0x001B # ЭСКЕЙП
0x1C 0x001C # РАЗДЕЛИТЕЛЬ ФАЙЛОВ
0x1D 0x001D # СЕПАРАТОР ГРУПП
0x1E 0x001E # ЗАПИСЬ СЕПАРАТОР
0x1F 0x001F # РАЗДЕЛИТЕЛЬ
0x20 0x0020 # ПРОБЕЛ
0x21 0x0021 # восклицательный знак
0x22 0x0022 # ЦИТАТНЫЙ ЗНАК
0x23 0x0023 # НОМЕРНЫЙ ЗНАК
0x24 0x0024 # ЗНАК ДОЛЛАР
0x25 0x0025 # ЗНАК ПЕРСОНА
0x26 0x0026 # АМПЕРСАНД
0x27 0x0027 # АПОСТРОФ
0x28 0x0028 # ЛЕВЫЙ ПАРЕНТЕЗ
0x29 0x0029 # ПРАВИЛЬНЫЙ ПАРЕНТЕЗ
0x2A 0x002A # АСТЕРИСК
0x2B 0x002B # ПОДПИСАТЬСЯ
0x2C 0x002C #COMMA
0x2D 0x002D # ДЕФИС-МИНУС
0x2E 0x002E # ПОЛНАЯ ОСТАНОВКА
0x2F 0x002F # СОЛИДУС
0x30 0x0030 # ЦИФРОВОЙ НУЛЬ
0x31 0x0031 # ЦИФРА ОДИН
0x32 0x0032 # ЦИФРОВОЙ ДВА
0x33 0x0033 # ЦИФРА ТРИ
0x34 0x0034 # ЦИФРА ЧЕТЫРЕ
0x35 0x0035 # ЦИФРОВАЯ ПЯТЬ
0x36 0x0036 # ШЕСТЬ ЦИФРОВ
0x37 0x0037 # ЦИФРОВАЯ СЕМЬ
0x38 0x0038 # ЦИФРА ВОСЕМЬ
0x39 0x0039 # ЦИФРА ДЕВЯТЬ
0x3A 0x003A # КОЛОН
0x3B 0x003B # СЕМИКОЛОН
0x3C 0x003C # МЕНЬШЕ ЗНАКА
0x3D 0x003D # ЗНАК РАВНО
0x3E 0x003E # БОЛЬШЕ, ЧЕМ ЗНАК
0x3F 0x003F # ВОПРОСНАЯ МЕТКА
0x40 0x0040 # КОММЕРЧЕСКИЙ AT
0x41 0x0041 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА A
0x42 0x0042 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА B
0x43 0x0043 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА C
0x44 0x0044 # ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА D
0x45 0x0045 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА E
0x46 0x0046 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА F
0x47 0x0047 # ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА G
0x48 0x0048 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА H
0x49 0x0049 # ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА I
0x4A 0x004A # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА J
0x4B 0x004B # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА K
0x4C 0x004C # ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА L
0x4D 0x004D # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА M
0x4E 0x004E # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА N
0x4F 0x004F # ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА O
0x50 0x0050 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА P
0x51 0x0051 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА Q
0x52 0x0052 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА R
0x53 0x0053 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА S
0x54 0x0054 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА T
0x55 0x0055 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА U
0x56 0x0056 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА V
0x57 0x0057 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА W
0x58 0x0058 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА X
0x59 0x0059 # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА Y
0x5A 0x005A # ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА Z
0x5B 0x005B # КВАДРАТНЫЙ КРОНШТЕЙН ЛЕВОЙ
0x5C 0x005C # ОБРАТНЫЙ СОЛИД
0x5D 0x005D # ПРАВЫЙ КВАДРАТНЫЙ КРОНШТЕЙН
0x5E 0x005E #CIRCUMFLEX ACCENT
0x5F 0x005F # НИЗКАЯ СТРОКА
0x60 0x0060 # GRAVE ACCENT
0x61 0x0061 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A
0x62 0x0062 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА B
0x63 0x0063 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА C
0x64 0x0064 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА D
0x65 0x0065 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА E
0x66 0x0066 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА F
0x67 0x0067 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА G
0x68 0x0068 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА H
0x69 0x0069 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА I
0x6A 0x006A # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА J
0x6B 0x006B # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА K
0x6C 0x006C # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА L
0x6D 0x006D # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА M
0x6E 0x006E # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА N
0x6F 0x006F # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА O
0x70 0x0070 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА P
0x71 0x0071 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА Q
0x72 0x0072 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА R
0x73 0x0073 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА S
0x74 0x0074 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА T
0x75 0x0075 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА U
0x76 0x0076 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА V
0x77 0x0077 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА W
0x78 0x0078 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА X
0x79 0x0079 # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА Y
0x7A 0x007A # СТРОЧНАЯ ЛАТИНСКАЯ БУКВА Z
0x7B 0x007B # ЛЕВЫЙ ИЗОЛИРУЮЩИЙ КРОНШТЕЙН
0x7C 0x007C # ВЕРТИКАЛЬНАЯ ЛИНИЯ
0x7D 0x007D # ПРАВЫЙ ИЗГОЛЬНЫЙ КРОНШТЕЙН
0x7E 0x007E # ТИЛЬДА
0x7F 0x007F # УДАЛИТЬ
0x80 0x0402 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА DJE
0x81 0x0403 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА GJE
0x82 0x201A # ОДИН ЦИТАТНЫЙ МАРК НИЗКОГО-9
0x83 0x0453 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА GJE
0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
0x85 0x2026 # ГОРИЗОНТАЛЬНЫЙ ЭЛЛИПСИС
0x86 0x2020 # КИНЖАЛ
0x87 0x2021 # ДВОЙНОЙ КИНЖАЛ
0x88 0x20AC # ЗНАК ЕВРО
0x89 0x2030 # ЗАПИСЬ МИЛЛЯ
0x8A 0x0409 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА LJE
0x8B 0x2039 # ОДИН ЛЕВЫЙ УГОЛ ЦИТАТЫ
0x8C 0x040A # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА NJE
0x8D 0x040C # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА KJE
0x8E 0x040B # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА TSHE
0x8F 0x040F # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ДЖЕ
0x90 0x0452 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА DJE
0x91 0x2018 # ЛЕВАЯ ОДИНАРНАЯ ЦИТАТА
0x92 0x2019 # ПРАВАЯ ОДИНАРНАЯ ЦИТАТА
0x93 0x201C # ЛЕВАЯ МАРКА ДВОЙНОЙ ЦИТАТЫ
0x94 0x201D # ПРАВАЯ ДВОЙНАЯ ЦИТАТА
0x95 0x2022 # БЮЛЛЕТЕНЬ
0x96 0x2013 #EN DASH
0x97 0x2014 #EM DASH
0x98 # НЕОПРЕДЕЛЕННО
0x99 0x2122 # ТОВАРНЫЙ ЗНАК
0x9A 0x0459 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА LJE
0x9B 0x203A # ОДИН УГОЛ ВПРАВО ЦИТАТНЫЙ МАРК
0x9C 0x045A # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА NJE
0x9D 0x045C # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА KJE
0x9E 0x045B # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА TSHE
0x9F 0x045F # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА ДЖЕ
0xA0 0x00A0 # ПРОБЕЛ БЕЗ ПЕРЕРЫВА
0xA1 0x040E # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА КОРОТКАЯ U
0xA2 0x045E # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА КОРОТКАЯ U
0xA3 0x0408 # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА JE
0xA4 0x00A4 # ЗНАК ВАЛЮТЫ
0xA5 0x0490 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА GHE С ПОВОРОТОМ
0xA6 0x00A6 # Сломанная полоса
0xA7 0x00A7 # ЗНАК РАЗДЕЛА
0xA8 0x0401 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА IO
0xA9 0x00A9 # ЗНАК АВТОРСКОГО ПРАВА
0xAA 0x0404 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА УКРАИНСКИЙ IE
0xAB 0x00AB # ДВОЙНОЙ УГЛОВОЙ ЦИТАТНЫЙ МАРК, УКАЗАННЫЙ ВЛЕВО
0xAC 0x00AC # БЕЗ ЗНАКА
0xAD 0x00AD # МЯГКИЙ ДЕФИС
0xAE 0x00AE # ЗАПИСАННЫЙ ЗНАК
0xAF 0x0407 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА YI
0xB0 0x00B0 # ЗНАК СТЕПЕНИ
0xB1 0x00B1 # ЗНАК ПЛЮС-МИНУС
0xB2 0x0406 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА БЕЛОРУССКО-УКРАИНСКАЯ I
0xB3 0x0456 # КИРИЛИЧЕСКАЯ СТРОЧНАЯ БУКВА БЕЛОРУССКО-УКРАИНСКАЯ I
0xB4 0x0491 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА GHE С ПОВОРОТОМ
0xB5 0x00B5 # ЗНАК МИКРО
0xB6 0x00B6 # ЗНАК ПИЛКРОУ
0xB7 0x00B7 # СРЕДНЯЯ ТОЧКА
0xB8 0x0451 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА IO
0xB9 0x2116 # ЗНАК ЧИСЛА
0xBA 0x0454 # КИРИЛИЧЕСКАЯ СТРОЧНАЯ БУКВА УКРАИНСКИЙ IE
0xBB 0x00BB # ДВОЙНОЙ УГОЛ ЦИТАТЫ, УКАЗЫВАЮЩИЙ ВПРАВО
0xBC 0x0458 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА JE
0xBD 0x0405 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА DZE
0xBE 0x0455 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА DZE
0xBF 0x0457 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА YI
0xC0 0x0410 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА A
0xC1 0x0411 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА BE
0xC2 0x0412 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА VE
0xC3 0x0413 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА GHE
0xC4 0x0414 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА DE
0xC5 0x0415 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА IE
0xC6 0x0416 # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ZHE
0xC7 0x0417 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ZE
0xC8 0x0418 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА I
0xC9 0x0419 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА КОРОТКАЯ I
0xCA 0x041A # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА KA
0xCB 0x041B # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА EL
0xCC 0x041C # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА EM
0xCD 0x041D # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА EN
0xCE 0x041E # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА O
0xCF 0x041F # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА PE
0xD0 0x0420 # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ER
0xD1 0x0421 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ES
0xD2 0x0422 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА TE
0xD3 0x0423 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА U
0xD4 0x0424 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА EF
0xD5 0x0425 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА HA
0xD6 0x0426 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА TSE
0xD7 0x0427 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА CHE
0xD8 0x0428 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА SHA
0xD9 0x0429 # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ЩА
0xDA 0x042A # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ЖЕСТКИЙ ЗНАК
0xDB 0x042B # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА ЙЕРУ
0xDC 0x042C # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА МЯГКИЙ ЗНАК
0xDD 0x042D # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА E
0xDE 0x042E # КИРИЛЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА YU
0xDF 0x042F # КИРИЛИЧЕСКАЯ ЗАГЛАВНАЯ БУКВА YA
0xE0 0x0430 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА A
0xE1 0x0431 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА BE
0xE2 0x0432 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА VE
0xE3 0x0433 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА GHE
0xE4 0x0434 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА DE
0xE5 0x0435 # КИРИЛИЧЕСКАЯ СТРОЧНАЯ БУКВА IE
0xE6 0x0436 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА ZHE
0xE7 0x0437 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА ZE
0xE8 0x0438 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА I
0xE9 0x0439 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА КОРОТКАЯ I
0xEA 0x043A # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА KA
0xEB 0x043B # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА EL
0xEC 0x043C # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА EM
0xED 0x043D # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА EN
0xEE 0x043E # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА O
0xEF 0x043F # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА PE
0xF0 0x0440 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА ER
0xF1 0x0441 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА ES
0xF2 0x0442 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА TE
0xF3 0x0443 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА U
0xF4 0x0444 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА EF
0xF5 0x0445 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА HA
0xF6 0x0446 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА TSE
0xF7 0x0447 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА CHE
0xF8 0x0448 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА SHA
0xF9 0x0449 # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА ЩА
0xFA 0x044A # КИРИЛИЧЕСКАЯ СТРОЧНАЯ БУКВА ЖЕСТКИЙ ЗНАК
0xFB 0x044B # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА ЕРУ
0xFC 0x044C # КИРИЛИЧЕСКАЯ СТРОЧНАЯ БУКВА МЯГКИЙ ЗНАК
0xFD 0x044D # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА E
0xFE 0x044E # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА YU
0xFF 0x044F # СТРОЧНАЯ КИРИЛИЧЕСКАЯ БУКВА YA
 

Модуль ngx_http_charset_module

Модуль ngx_http_charset_module

Модуль ngx_http_charset_module добавляет указанный charset в поле заголовка ответа Content-Type. Кроме того, модуль может конвертировать данные из одной кодировки в другую, с некоторыми ограничениями:

  • конвертация осуществляется в одну сторону — от сервера к клиенту,
  • могут быть преобразованы только однобайтовые кодировки
  • или однобайтовые кодировки в / из UTF-8.
Пример конфигурации
включить conf / koi-win;

кодировка windows-1251;
source_charset koi8-r;
 
Директивы
Синтаксис: кодировка кодировка | off ;
По умолчанию:
 charset off; 
Контекст: http , server , location , if in location

Добавляет указанную кодировку в Content-Type. поле заголовка ответа.Если эта кодировка отличается от указанной в директиве source_charset выполняется преобразование.

Параметр off отменяет добавление кодировки. в поле заголовка ответа Content-Type.

Кодировку можно определить с помощью переменной:

charset $ charset;
 

В таком случае должны присутствовать все возможные значения переменной. в конфигурации хотя бы один раз в виде charset_map, charset или source_charset директивы.Для utf-8 , windows-1251 и koi8-r charsets, достаточно включить файлы conf / koi-win , conf / koi-utf и conf / win-utf в конфигурацию. Для других кодировок просто создание фиктивной таблицы преобразования работает, Например:

charset_map iso-8859-5 _ {}
 

Кроме того, кодировку можно установить в Поле заголовка ответа «X-Accel-Charset». Эту возможность можно отключить с помощью proxy_ignore_headers, fastcgi_ignore_headers, uwsgi_ignore_headers, scgi_ignore_headers, а также grpc_ignore_headers директивы.

Синтаксис: charset_map charset1 charset2 {...}
По умолчанию:
Контекст: http

Описывает таблицу преобразования из одной кодировки в другую.Таблица обратного преобразования строится с использованием тех же данных. Коды символов даны в шестнадцатеричном формате. Отсутствующие символы в диапазоне 80-FF заменяются на «? ». При преобразовании из UTF-8 символы отсутствуют в однобайтовой кодировке заменяются на « & # XXXX; ».

Пример:

charset_map koi8-r windows-1251 {
    C0 FE; # маленький ю
    C1 E0; # маленький а
    C2 E1; # маленький б
    C3 F6; # small ts
    . ..
}
 

При описании таблицы преобразования в UTF-8 коды для кодировки UTF-8 должны быть приведенным во втором столбце, например:

charset_map koi8-r utf-8 {
    C0 D18E; # маленький ю
    C1 D0B0; # маленький а
    C2 D0B1; # маленький б
    C3 D186; # small ts
    ...
}
 

Полные таблицы преобразования с koi8-r на windows-1251 , а от koi8-r и окна-1251 до utf-8 представлены в файлах раздачи conf / koi-win , conf / koi-utf и conf / win-utf .

Синтаксис: charset_types mime-type ...;
По умолчанию:
 charset_types текст / HTML-текст / XML-текст / обычный текст / vnd.wap.wml
приложение / javascript приложение / rss + xml; 
Контекст: http , сервер , расположение

Эта директива появилась в версии 0.7.9.

Включает обработку модуля в ответах с указанными типами MIME в дополнение к « text / html ». Специальное значение « * » соответствует любому типу MIME (0.8.29).

До версии 1.5.4 использовалось « application / x-javascript ». в качестве типа MIME по умолчанию вместо « application / javascript ».
Синтаксис: override_charset на | off ;
По умолчанию:
 override_charset off; 
Контекст: http , server , location , if in location

Определяет, нужно ли выполнять преобразование ответов получено от прокси-сервера или сервера FastCGI / uwsgi / SCGI / gRPC когда ответы уже содержат кодировку в «Content-Type» поле заголовка ответа.Если преобразование включено, кодировка указана в полученном ответ используется как кодировка источника.

Следует отметить, что если ответ получен в подзапросе затем преобразование из кодировки ответа в кодировку основного запроса выполняется всегда, независимо от значения override_charset установка директивы.
Синтаксис: source_charset charset ;
По умолчанию:
Контекст: http , server , location , if in location

Определяет исходную кодировку ответа.Если эта кодировка отличается от указанной в директиве charset выполняется преобразование.

Строковые функции и операторы

0983cd24fb0 d6963f7d28e17f72
ascii ( нить ) int ASCII код первого байта аргумента ascii (‘х’) 120
btrim ( нить текст [ , символы текст ]) текст Удалите самую длинную строку, состоящую только из символов в символы (по умолчанию пробел) от начала и до конца нить btrim (‘xyxtrimyyx’, ‘ху’) отделка
chr ( int ) текст Персонаж с данным ASCII код chr (65) А
конвертировать ( нить текст , [ src_encoding название , ] dest_encoding название ) текст Преобразовать строку в dest_encoding .Исходная кодировка определяется src_encoding . Если src_encoding опущен, предполагается кодировка базы данных. convert (‘text_in_utf8’, ‘UTF8’, ‘LATIN1’) text_in_utf8 представлен в ISO 8859-1, кодировка
декодировать ( нить текст , тип текст ) байт Декодировать двоичные данные из нить ранее закодировано с помощью кодировать .Тип параметра такой же, как в кодировать . декодировать (‘MTIzAAE =’, ‘base64’) 123 \ 000 \ 001
кодировать ( данные байт , тип текст ) текст Кодируйте двоичные данные в другое представление. Поддерживаемые типы: base64 , шестнадцатеричный , побег . Побег просто выводит нулевые байты как \ 000 и удваивает обратную косую черту. кодировать (E’123 \\ 000 \\ 001 ‘,’ base64 ‘) MTIzAAE =
initcap ( нить ) текст Преобразуйте первую букву каждого слова в верхний регистр, а остальные — в нижний.Слова представляют собой последовательности буквенно-цифровых символов, разделенных не буквенно-цифровыми символами. initcap (‘привет, ТОМАС’) Привет Томас
длина ( нить ) int Количество знаков в нить длина (‘хосе’) 4
lpad ( нить текст , длина int [ , наполнять текст ]) текст Заполните нить по длине длина добавляя символы наполнять (по умолчанию пробел).Если нить уже длиннее, чем длина затем он усекается (справа). lpad (‘привет’, 5, ‘ху’) xyxhi
ltrim ( нить текст [ , символы текст ]) текст Удалите самую длинную строку, содержащую только символы из символы (по умолчанию пробел) от начала нить ltrim (‘zzzytrim’, ‘xyz’) отделка
md5 ( нить ) текст Вычисляет хэш MD5 для нить , возвращая результат в шестнадцатеричном формате md5 (‘abc’)
pg_client_encoding () название Текущее имя кодировки клиента pg_client_encoding () SQL_ASCII
quote_ident ( нить ) текст Вернуть данную строку в кавычках для использования в качестве идентификатора в SQL строка оператора.Кавычки добавляются только в случае необходимости (т. Е. Если строка содержит символы, не являющиеся идентификаторами, или если она будет складываться по регистру). Встроенные кавычки правильно удвоены. quote_ident (‘Foo bar’) «Foo bar»
quote_literal ( нить ) текст Вернуть заданную строку в кавычках для использования в качестве строкового литерала в SQL строка оператора. Встроенные одинарные кавычки и обратная косая черта правильно удваиваются. quote_literal (‘О \’ Рейли ‘) ‘О»Рейли’
regexp_replace ( нить текст , шаблон текст , замена текст [, флаги текст ]) текст Заменить подстроку, соответствующую регулярному выражению POSIX. Видеть Раздел 9.7 для получения дополнительной информации о сопоставлении с образцом. regexp_replace (‘Томас’, ‘. [mN] a.’, ‘M’) ThM
повторить ( нить текст , номер int ) текст Повторить нить указанный номер раз повторить (‘Pg’, 4) PgPgPgPg
заменить ( нить текст , из текст , к текст ) текст Заменить все вхождения в нить подстроки из с подстрокой к replace (‘abcdefabcdef’, ‘cd’, ‘XX’) abXXefabXXef
rpad ( нить текст , длина int [ , наполнять текст ]) текст Заполните нить по длине длина добавляя символы наполнять (по умолчанию пробел).Если нить уже длиннее, чем длина затем он усекается. rpad (‘привет’, 5, ‘ху’) хиксикс
rtrim ( нить текст [ , символы текст ]) текст Удалите самую длинную строку, содержащую только символы из символы (по умолчанию пробел) от конца нить rtrim (‘trimxxxx’, ‘х’) отделка
split_part ( нить текст , разделитель текст , поле int ) текст Расколоть нить на разделитель и вернуть заданное поле (считая от единицы) split_part (‘abc ~ @ ~ def ~ @ ~ ghi’, ‘~ @ ~’, 2) def
strpos ( нить , подстрока ) int Расположение указанной подстроки (то же, что и должность( подстрока в нить ) , но обратите внимание на обратный порядок аргументов) strpos (‘высокий’, ‘ig’) 2
substr ( нить , из [ , считать ]) текст Извлечь подстроку (аналогично подстрока ( нить из из для считать ) ) substr (‘алфавит’; 3, 2) ph
to_ascii ( нить текст [ , кодирование текст ]) текст Перерабатывать нить к ASCII из другой кодировки (поддерживает только преобразование из LATIN1 , LATIN2 , ЛАТИНСКИЙ 9 , а также WIN1250 кодировки) to_ascii (‘Карел’) Карел
to_hex ( номер int или же Bigint ) текст Перерабатывать номер в его эквивалентное шестнадцатеричное представление to_hex (2147483647) 7fffffff
перевести ( нить текст , из текст , к текст ) текст Любой персонаж в нить что соответствует символу в из заменяется соответствующим символом в к набор translate (‘12345′, ’14’, ‘топор’) a23x5

10.10 поддерживаемых наборов символов и сопоставления

10.10 Поддерживаемые наборы символов и сопоставления

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

Чтобы перечислить доступные наборы символов и их сопоставления по умолчанию, используйте SHOW CHARACTER SET оператор или запросите INFORMATION_SCHEMA CHARACTER_SETS таблица.Например:

  mysql> ПОКАЗАТЬ НАБОР СИМВОЛОВ;
+ ---------- + --------------------------------- + ---- ----------------- + -------- +
| Кодировка | Описание | Сортировка по умолчанию | Макслен |
+ ---------- + --------------------------------- + ---- ----------------- + -------- +
| armcii8 | ARMSCII-8 Армянский | armcii8_general_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| big5 | Big5 Традиционный китайский | big5_chinese_ci | 2 |
| двоичный | Двоичная псевдокартина | двоичный | 1 |
| cp1250 | Окна Центральноевропейская | cp1250_general_ci | 1 |
| cp1251 | Windows кириллица | cp1251_general_ci | 1 |
| cp1256 | Windows арабский | cp1256_general_ci | 1 |
| cp1257 | Windows Baltic | cp1257_general_ci | 1 |
| cp850 | ДОС Западноевропейская | cp850_general_ci | 1 |
| cp852 | DOS Центральноевропейская | cp852_general_ci | 1 |
| cp866 | DOS Русский | cp866_general_ci | 1 |
| cp932 | SJIS для Windows Японский | cp932_japanese_ci | 2 |
| dec8 | DEC Западноевропейский | dec8_swedish_ci | 1 |
| eucjpms | UJIS для Windows Японский | eucjpms_japanese_ci | 3 |
| euckr | EUC-KR Корейский | euckr_korean_ci | 2 |
| gb18030 | Национальный стандарт Китая GB18030 | gb18030_chinese_ci | 4 |
| gb2312 | GB2312 Упрощенный китайский | gb2312_chinese_ci | 2 |
| gbk | GBK (упрощенный китайский) | gbk_chinese_ci | 2 |
| geostd8 | GEOSTD8 Грузинский | geostd8_general_ci | 1 |
| греческий | ISO 8859-7 Греческий | greek_general_ci | 1 |
| иврит | ISO 8859-8 Еврейский | hebrew_general_ci | 1 |
| hp8 | HP в Западной Европе | hp8_english_ci | 1 |
| keybcs2 | DOS Kamenicky чешско-словацкий | keybcs2_general_ci | 1 |
| koi8r | КОИ8-Р Релком Русские | koi8r_general_ci | 1 |
| koi8u | КОИ8-У Украинский | koi8u_general_ci | 1 |
| latin1 | cp1252 Западноевропейский | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Центральноевропейский | latin2_general_ci | 1 |
| latin5 | ISO 8859-9 Турецкий | latin5_turkish_ci | 1 |
| latin7 | ISO 8859-13 Балтика | latin7_general_ci | 1 |
| macce | Mac Центральноевропейский | macce_general_ci | 1 |
| макроман | Mac западноевропейский | macroman_general_ci | 1 |
| sjis | Shift-JIS Японский | sjis_japanese_ci | 2 |
| swe7 | 7bit шведский | swe7_swedish_ci | 1 |
| tis620 | TIS620 Тайский | tis620_thai_ci | 1 |
| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
| уджи | EUC-JP Японский | ujis_japanese_ci | 3 |
| utf16 | Юникод UTF-16 | utf16_general_ci | 4 |
| utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 |
| utf32 | UTF-32 Unicode | utf32_general_ci | 4 |
| utf8 | Юникод UTF-8 | utf8_general_ci | 3 |
| utf8mb4 | Юникод UTF-8 | utf8mb4_0900_ai_ci | 4 |
+ ---------- + --------------------------------- + ---- ----------------- + -------- +  

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


Поддержка набора символов | Greenplum Docs

BIG5 не поддерживается как серверная кодировка
EUC_CN EUC_CN, MULE_INTERNAL, UTF8
EUC_JP EUC_JP, MULE_INTERNAL, SJIS, UTF8
EUC_KR EUC_KR, MULE_INTERNAL, UTF8
EUC_TW EUC_TW, BIG5, MULE_INTERNAL, UTF8
ГБ18030 не поддерживается как серверная кодировка
ГБК не поддерживается как серверная кодировка
ISO_8859_5 ISO_8859_5, KOI8, MULE_INTERNAL, UTF8, WIN866, WIN1251
ISO_8859_6 ISO_8859_6, UTF8
ISO_8859_7 ISO_8859_7, UTF8
ISO_8859_8 ISO_8859_8, UTF8
JOHAB JOHAB, UTF8
КОИ8 KOI8, ISO_8859_5, MULE_INTERNAL, UTF8, WIN866, WIN1251
LATIN1 LATIN1, MULE_INTERNAL, UTF8
ЛАТИН 2 LATIN2, MULE_INTERNAL, UTF8, WIN1250
LATIN3 LATIN3, MULE_INTERNAL, UTF8
ЛАТИН 4 LATIN4, MULE_INTERNAL, UTF8
LATIN5 LATIN5, UTF8
LATIN6 LATIN6, UTF8
LATIN7 LATIN7, UTF8
LATIN8 LATIN8, UTF8
ЛАТИН 9 LATIN9, UTF8
LATIN10 LATIN10, UTF8
MULE_INTERNAL MULE_INTERNAL, BIG5, EUC_CN, EUC_JP, EUC_KR, EUC_TW, ISO_8859_5, KOI8, от LATIN1 до LATIN4, SJIS, WIN866, WIN1250, WIN1251
SJIS не поддерживается как серверная кодировка
SQL_ASCII не поддерживается как серверная кодировка
UHC не поддерживается как серверная кодировка
UTF8 все поддерживаемые кодировки
WIN866 WIN866
ISO_8859_5 KOI8, MULE_INTERNAL, UTF8, WIN1251
WIN874 WIN874, UTF8
WIN1250 WIN1250, LATIN2, MULE_INTERNAL, UTF8
WIN1251 WIN1251, ISO_8859_5, KOI8, MULE_INTERNAL, UTF8, WIN866
WIN1252 WIN1252, UTF8
WIN1253 WIN1253, UTF8
WIN1254 WIN1254, UTF8
WIN1255 WIN1255, UTF8
WIN1256 WIN1256, UTF8
WIN1257 WIN1257, UTF8
WIN1258 WIN1258, UTF8

Кодирование в MySQL | ISPserver

Кодировка MySQL

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

Кодировка, включая данные на сервере MySQL, должна соответствовать кодировке самих данных. Например, для русских символов используется кодировка cp1251. Если в таблице есть записи с русскими символами, кодировка таблицы должна быть установлена ​​как cp1251, иначе вместо русских символов будут отображаться вопросительные знаки или другие символы.

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

создать базу данных `my-db` кодировку по умолчанию cp1251; 

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

Установите желаемую кодировку подключения сразу после подключения к серверу MySQL, используя следующий запрос:

установить имена cp1251 

Есть ряд клиентов, которые не могут установить необходимую кодировку и поэтому используют свои собственные. В таких случаях укажите в файле my.cnf в разделе [mysqld] следующую строку:

set init_connect = "установить имена cp1251"

где cp1251 - необходимое кодирование.

В этом случае сервер запустит команду «set names cp1251» сразу после подключения к клиенту и установит кодировку, указанную в запросе.

Наиболее распространенные русские кодировки следующие:

utf8, cp866 (DOS), cp1251 (Windows), koi8r 

Установка и использование одинаковой кодировки для серверов баз данных на всех уровнях помогает устранить 90% проблем с кодировкой в ​​MySQL.