UTF-EBCDIC - это кодировка символов, используемая для представления символов Юникода . Он предназначен для поддержки EBCDIC , так что унаследованные приложения EBCDIC на мэйнфреймах могут без особого труда обрабатывать символы. Его преимущества для существующих систем на основе EBCDIC аналогичны преимуществам UTF-8 для существующих систем на основе ASCII . Подробная информация о UTF-EBCDIC описана в техническом отчете Unicode №16.
Чтобы создать версию серии кодовых точек Unicode в кодировке UTF-EBCDIC, сначала применяется кодировка на основе UTF-8 (известная в спецификации как UTF-8-Mod) (создавая то, что в спецификации называется последовательностью I8). Основное различие между этой кодировкой и UTF-8 заключается в том, что она позволяет кодовым точкам Unicode от U + 0080 до U + 009F ( управляющие коды C1 ) быть представлены в виде одного байта и, следовательно, позже сопоставлены с соответствующими управляющими кодами EBCDIC. Чтобы добиться этого, UTF-8-Mod использует 101XXXXX вместо 10XXXXXX в качестве формата завершающих байтов в многобайтовой последовательности. Поскольку он может содержать только 5 бит, а не 6, кодирование UTF-8-Mod кодовых точек выше U + 009F обычно больше, чем кодирование UTF-8.
Преобразование UTF-8-Mod оставляет данные в формате на основе ASCII (например, U + 0041 «A» по-прежнему кодируется как 01000001), поэтому каждый байт пропускается через обратимую (однозначную) таблицу поиска. для создания окончательной кодировки UTF-EBCDIC. Например, 01000001 в этой таблице соответствует 11000001; таким образом, кодировка UTF-EBCDIC для U + 0041 (Unicode "A") равна 0xC1 (EBCDIC "A").
Эта форма кодирования используется редко, даже на мэйнфреймах на основе EBCDIC, для которых она была разработана. Операционные системы мэйнфреймов на базе IBM EBCDIC, такие как z / OS , обычно используют UTF-16 для полной поддержки Unicode. Например, DB2 UDB , COBOL , PL / I , Java и набор инструментов IBM XML поддерживают UTF-16 на мэйнфреймах IBM.
Макет кодовой страницы [ править ]
В UTF-EBCDIC 160 символов с однобайтовой кодировкой (по сравнению со 128 в UTF-8). Как видно, однобайтовая часть похожа на IBM-1047 вместо IBM-37 из-за расположения квадратных скобок. CCSID 37 имеет [] в шестнадцатеричном формате BA и BB вместо шестнадцатеричных AD и BD соответственно.
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _D | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ | NUL 0000 | SOH 0001 | STX 0002 | ETX 0003 | ST 009C | HT 0009 | SSA 0086 | DEL 007F | EPA 0097 | RI 008D | SS2 008E | ВТ 000Б | FF 000C | CR 000D | SO 000E | SI 000F |
1_ | DLE 0010 | DC1 0011 | DC2 0012 | DC3 0013 | OSC 009D | LF 000A | BS 0008 | ESA 0087 | CAN 0018 | EM 0019 | PU2 0092 | SS3 008F | FS 001C | GS 001D | RS 001E | США 001F |
2_ | ПОДКЛАДКА 0080 | HOP 0081 | ДПЖ 0082 | NBH 0083 | IND 0084 | NEL 0085 | ETB 0017 | ESC 001B | HTS 0088 | HTJ 0089 | VTS 008A | PLD 008B | PLU 008C | ENQ 0005 | ACK 0006 | BEL 0007 |
3_ | DCS 0090 | PU1 0091 | SYN 0016 | STS 0093 | CCH 0094 | MW 0095 | SPA 0096 | EOT 0004 | SOS 0098 | SGCI 0099 | SCI 009A | CSI 009B | DC4 0014 | NAK 0015 | PM 009E | SUB 001A |
4_ | SP 0020 | • +00 | • +01 | • +02 | • +03 | • +04 | • +05 | • +06 | • +07 | • +08 | • +09 | . 002E | < 003C | ( 0028 | + 002B | | 007C |
5_ | & 0026 | • + 0А | • + 0B | • + 0С | • + 0D | • + 0E | • + 0F | • +10 | • +11 | • +12 | ! 0021 | $ 0024 | * 002A | ) 0029 | ; 003B | ^ 005E |
6_ | - 002D | / 002F | • +13 | • +14 | • +15 | • +16 | • +17 | • +18 | • +19 | • + 1А | • + 1B | , 002C | % 0025 | _ 005F | > 003E | ? 003F |
7_ | • + 1С | • + 1D | • + 1E | • + 1F | 2 0000 | 2 0020 | 2 0040 | 2 0060 | 2 0080 | ` 0060 | : 003A | # 0023 | @ 0040 | ' 0027 | = 003D | « 0022 |
8_ | 2 00A0 | а 0061 | b 0062 | c 0063 | d 0064 | e 0065 | f 0066 | г 0067 | h 0068 | я 0069 | 2 00C0 | 2 00E0 | 2 0100 | 2 0120 | 2 0140 | 2 0160 |
9_ | 2 0180 | j 006A | k 006B | l 006C | м 006D | № 006E | o 006F | p 0070 | q 0071 | r 0072 | 2 01A0 | 2 01C0 | 2 01E0 | 2 0200 | 2 0220 | 2 0240 |
A_ | 2 0260 | ~ 007E | s 0073 | t 0074 | u 0075 | v 0076 | w 0077 | х 0078 | y 0079 | z 007A | 2 0280 | 2 02A0 | 2 02C0 | [ 005B | 2 02E0 | 2 0300 |
B_ | 2 0320 | 2 0340 | 2 0360 | 2 0380 | 2 03A0 | 2 03C0 | 2 03E0 | 3 0000 | 3 0400 | 3 0800 | 3 0C00 | 3 1000 | 3 1400 | ] 005D | 3 1800 | 3 1C00 |
C_ | { 007B | A 0041 | B 0042 | C 0043 | D 0044 | E 0045 | F 0046 | G 0047 | H 0048 | I 0049 | 3 2000 | 3 2400 | 3 2800 | 3 2C00 | 3 3000 | 3 3400 |
D_ | } 007D | J 004A | K 004B | L 004C | M 004D | № 004E | O 004F | P 0050 | Q 0051 | R 0052 | 3 3800 | 3 3C00 | 4 4000 | 4 8000 | 4 10000 | 4 18000 |
E_ | \ 005C | 4 20000 | S 0053 | Т 0054 | U 0055 | V 0056 | W 0057 | X 0058 | Y 0059 | Z 005A | 4 28000 | 4 30000 | 4 38000 | 5 40000 | 5 100000 | |
F_ | 0 0030 | 1 0031 | 2 0032 | 3 0033 | 4 0034 | 5 0035 | 6 0036 | 7 0037 | 8 0038 | 9 0039 | APC 009F |
Письмо Число Пунктуация Символ Другой Неопределенный
Синие ячейки, содержащие большое однозначное число, являются начальными байтами для последовательности из такого количества байтов. Номер точки шестнадцатеричного кода без жирного шрифта, показанный в ячейке, является наименьшим значением символа, закодированным с использованием этого начального байта. Это значение может быть больше, чем значение, которое было бы получено путем следования за начальным байтом байтов продолжения, которые все равны 65 (шестнадцатеричный 0x41), если это приведет к недопустимой слишком длинной форме.
Оранжевые ячейки с одной точкой - это байты продолжения. Шестнадцатеричное число, показанное после знака «+», является значением 5 добавляемых битов.
Красные ячейки указывают на начальные байты (для последовательности из такого количества байтов), которые никогда не могут появиться в правильно закодированном тексте UTF-EBCDIC, потому что любое возможное продолжение приведет к недопустимой слишком длинной форме. Например, 0x76 отмечен красным, потому что даже 0x76 0x73 (который отображается в последовательность UTF-8-Mod 0xC2 0xBF) будет просто чрезмерно длинной кодировкой U + 005F (правильно закодирован как UTF-8-Mod 0x5F, UTF-EBCDIC 0x6D).
Oracle UTFE [ править ]
Oracle UTFE - это вариант базы данных Oracle Unicode 3.0 UTF-8 , аналогичный варианту UTF-8 CESU-8 , в котором дополнительные символы кодируются как два 4-байтовых символа, а не как один 4- или 5-байтовый символ. Он используется только на платформах EBCDIC. [1]
Преимущества:
- Только набор символов Unicode для EBCDIC.
- Длина типов SQL CHAR может быть указана в количестве символов.
- Двоичный порядок столбцов SQL CHAR такой же, как двоичный порядок столбцов SQL NCHAR, если данные состоят из тех же дополнительных символов. Следовательно, эти столбцы одинаково сортируют идентичные строки. [1]
Недостатки:
- Дополнительные символы занимают шесть байтов вместо четырех. Следовательно, необходимо преобразовать дополнительные символы.
- UTFE не является стандартной кодировкой Unicode. Клиенты, которым требуется кодировка UTF-8, должны преобразовывать данные при извлечении и хранении. [1]
См. Также [ править ]
- UTF-1
- UTF-8
- BOCU-1
Ссылки [ править ]
- ^ a b c Бэрд, Кэти; Чиба, Дэн; Чу, Уинсон; Фан, Джессика; Хо, Клэр; Закон, Саймон; Ли, Джефф; Линсли, Питер; Мацуда, Кени; Осрофт, Тамзин; Такеда, Шиге; Танака, Линус; Тозава, Макото; Трюте, Барри; Цудзимото, Маюми; У, Инь; Яу, Майкл; Ю, Тим; Ван, Чао; Вонг, Саймон; Чжан, Вейран; Чжэн, Лэй; Чжу, Ян; Мур, Валари (2002) [1996]. «Приложение A: Данные локали». Руководство по поддержке глобализации баз данных Oracle9i (PDF) (выпуск 2 (9.2), ред.). Корпорация Oracle . Оракул A96529-01. Архивировано (PDF) из оригинала на 2017-02-14 . Проверено 14 февраля 2017 .
Внешние ссылки [ править ]
- В. С. Умамахесваран, Технический отчет Unicode № 16: определение UTF-EBCDIC (2002-04-16)