Кіріспе

Жоғары деңгейдегі 7 биттік және 8 биттік таңба кодтау жүйесі

ISO/IEC 2022 Ақпараттық технологиялар – Таңба кодтарының құрылымы және кеңейту техникалары – таңба кодтау саласындағы ISO/IEC стандарты. Ол ECMA стандарты ECMA 35-ке тең, сондай-ақ ANSI стандарты ANSI X3.41-ге де сәйкес келеді.

ISO 2022 таңба кодтамаларының сәйкес келетін жалпы құрылымын анықтайды, байттардың белгілі бір диапазонларын (0x00–1F және 0x7F–9F) таңба кодтамалары үшін пайдалануға бөліп береді. Бұл форматтарды қамтиды: байтқа 8 биттен болғанда осы жиынтықты кодтау форматы, байтқа 7 биттен болғанда осы кодтау жүйесіндегі осы жиынтықты кодтау форматы, және кез келген сәйкестікті таңба деректерін осындай 7 биттік ортадан өткізу әдісі. Сондай-ақ, ANSI эскейп кодтарының жалпы құрылымы, жеке таңба жиынтықтарын анықтау, нақты кодтау мүмкіндіктерін немесе жиынтықтарын жариялау, сондай-ақ басқа кодтау жүйелерімен өзара әрекеттесу немесе оларға ауысу үшін арнайы эскейп код форматтары да қарастырылады. Атап айтқанда, ISO/IEC 2022 механизмдерін пайдаланатын 7 биттік кодтау жүйелеріне ISO 2022 JP (немесе JIS кодтау) жатады, ол негізінен жапон тіліндегі электрондық поштада қолданылады. ISO/IEC 2022 стандартына сәйкес келетін 8 биттік кодтау жүйелеріне ISO/IEC 4873 (ECMA 43) кіреді, ол өз кезегінде ISO/IEC 8859 стандартына сәйкес келеді. ISO 2022 стандартының арнайы қолданыстарының бірі – MARC 21 кітапханалық жазбаларында қолданылатын MARC 8 кодтау жүйесі. Эскейп тізбектері қолданылып жатқан таңба жиынтығын ғана емес, сонымен қатар жиынтықтың бір байттық немесе көп байттық екенін (көп байттық болса, қанша байтты пайдаланатынын көрсетпесе де) және әр байттың 94 немесе 96 рұқсат етілген мәні бар екенін де көрсетеді.

Нөмірлік және номенклатура

ISO/IEC 2022 коды символдық кодтар мен дисплейде көрсетілетін символдар арасындағы екі деңгейлі сәйкестікті анықтайды. Escape тізбектері графикалық таңбалар жиынтықтарының кең тізілімінің кез келгенін G0-ден G3-ке дейін аталған төрт жұмыс жиынтығының біріне "тағайындауға" мүмкіндік береді, ал қысқа бақылау тізбектері ағындағы байттарды интерпретациялау үшін "шақырылатын" жұмыс жиынтығын анықтайды. Байт мәндерін кодтау ("биттік комбинациялар") көбінесе бағаналық-қатарлық нотацияда беріледі, онда 00–15 диапазонындағы екі ондық сан (әрқайсысы бір гексадецималды цифрға сәйкес келеді) слэшпен бөлінеді. Сондықтан, мысалы, 2/0 (0x20) мен 2/15 (0x2F) кодтары "02 бағаны" деп аталуы мүмкін. Бұл ISO/IEC 2022 / ECMA 35 стандартының өзінде қолданылатын нотация. Олар басқа жерде гексадецималдық немесе тиісті ASCII символдары арқылы сипатталуы мүмкін, бұл мақалада жиі қолданылады, бірақ escape тізбектері байт мәндері тұрғысынан анықталған, ал осы байт мәніне тағайындалған графикалық символ бақылау тізбегіне әсер етпей өзгертілуі мүмкін. 7 биттік ASCII графикалық диапазонынан (гексадецималдық 0x20–0x7F) байт мәндері, таңба кодтары кестесінің сол жағында орналасқандықтан, "GL" кодтары деп аталады ("GL" – "графика сол жақта"), ал "жоғарғы ASCII" диапазонынан (0xA0–0xFF) байттар, егер қол жетімді болса (яғни 8 биттік ортада), "GR" кодтары деп аталады ("графика оң жақта"). Бақылау диапазондары үшін "CL" (0x00–0x1F) және "CR" (0x80–0x9F) терминдері анықталған, бірақ CL диапазоны әрқашан негізгі (C0) бақылауларын шақырады, ал CR диапазоны әрқашан екінші (C1) бақылауларын шақырады немесе пайдаланылмайды және G0 GL-ге шақырылған кезде, қандай таңбалар жиынтығы тағайындалғанына қарамастан, әрқашан қол жетімді. Олар графикалық таңбалар жиынтығына кіргізілмеуі мүмкін, бірақ басқа өлшемдердегі немесе түрлеріндегі бос орын символдары болуы мүмкін.

Құтылу реттілігінің жалпы синтаксисі

ESC (эскейп) таңбасын пайдаланатын тізбектер ESC [ ] нысанында болады, онда ESC таңбасынан кейін 0x20–0x2F диапазонынан нөл немесе одан көп аралық байттар және 0x30–0x7E диапазонынан бір соңғы байт келеді. Бірінші байт немесе оның болмауы эскейп тізбегінің типін анықтайды; мысалы, ол жұмыс жиынтығын немесе бір басқару функциясын көрсетуі мүмкін. Эскейп тізбегінің барлық түрлерінде 0x30–0x3F диапазонындағы байттар тараптардың алдын ала келісімімен анықталған тіркелмеген жеке пайдалану үшін резервтеліп қойылған. Кейбір жиынтықтардың басқару функциялары эскейп тізбегінен кейін қосымша байттарды пайдалана алады. Мысалы, ISO 6429 басқару функциясы "", оны эскейп тізбегі арқылы бейнелеуге болады, 0x30–0x3F диапазонынан нөл немесе одан көп байттар, содан кейін 0x20–0x2F диапазонынан нөл немесе одан көп байттар, содан кейін 0x40–0x7E диапазонынан бір байтпен жалғасады, және бүкіл тізбек "бақылау тізбегі" деп аталады.

Графикалық таңбалар жиынтығы

G0-ден G3-ге дейінгі төрт жұмыс жиынтығының әрқайсысы 94 таңбадан тұратын жиынтық немесе 94n таңбалық көп байтты жиынтық бола алады. Сонымен қатар, G1-ден G3-ге дейін 96 немесе 96n таңбадан тұратын жиынтықтар болуы мүмкін. 96 немесе 96n таңбадан тұратын жиынтықта, GL шақырылғанда 0x20-дан 0x7F-қа дейінгі байттар, ал GR шақырылғанда 0xA0-дан 0xFF-қа дейінгі байттар жиынтыққа бөлінеді және оны пайдалануға болады. 94 немесе 94n таңбадан тұратын жиынтықта 0x20 және 0x7F байттары қолданылмайды. ISO/IEC 10367 стандартынан сызықтармен сурет салу жиынтығы және ISO IR 164 (тек әріптерді қамтитын ISO 8859-8 стандартының G1 жиынтығының кіші жиынтығы, CCITT қолданады).

Таңбаларды біріктіру

Егер графикалық жиынтық басқаша белгіленбесе, символдар аралық символдар болып табылады, біріктірілмейді. ISO 2022 / ECMA 35 сондай-ақ, кері пробел және каретканы қайтару басқару символдарының, сондай-ақ "Графикалық символдар комбинациясы" (GCC) CSI тізбегінің, әйтпесе аралық символдарды біріктіру құралы ретінде таниды. ISO/IEC 646 осылайша кері пробел мен каретканы қайтаруды пайдалануға рұқсат береді, бірақ ISO/IEC 4873 / ECMA 43 және ISO/IEC 8859 графикалық символдар жиынын анықталмаған күйде қалдыратыны үшін тыйым салады. Дегенмен, ISO/IEC 4873 / ECMA 43 GCC функциясын пайдалануға рұқсат береді, егер символдар тізбегі өзгермей сақталса және жай ғана бір орында көрсетілсе, екінші мағынасы бар символ құру үшін үстіне басылмайынша.

Басқа 7 биттік нұсқалар

ISO 2022 KR 1993 жылғы RFC 1557 анықтамасымен сипатталған. Ол ASCII және корей тілінің екі байттық KS X 1001 1992 кодегін, бұрын KS C 5601 1987 деп аталған, енкодилейді. ISO 2022 JP 2-ден айырмашылығы, ол олардың арасында ауысу үшін Shift Out және Shift In символдарымен жұмыс істейді, ал жол басында бір рет ESC $ ) C символын қосып, KS X 1001-ді G1 ретінде белгілейді. Олар GB 2312 (жеңілдетілген қытай тілі үшін) және CNS 11643 (дәстүрлі қытай тілі үшін) символдар жиынтығын қолдайды. Негізгі ISO 2022 CN профилі ASCII-ді G0 (shift in) жиынтығы ретінде пайдаланады, сондай-ақ GB 2312 және CNS 11643-тің алғашқы екі жазықтығын қамтиды (өйткені осы екі жазықтық әдеттегі Big5-тен барлық дәстүрлі қытай символдарын бейнелеу үшін жеткілікті, RFC оған қосымшада сәйкестік көрсетеді): бұл клиент пен сервер арасындағы енкодировка қолдауындағы айырмашылықты пайдаланатын кейбір сайттар аралық скрипттер мен олармен байланысты шабуылдарды болдырмау үшін, барлық кірісті алмастыру символына (�) бейімдейді. ISO 2022 JP және UTF 16 енкодировкаларында да осы қауіпсіздік мәселесі (ASCII байт тізбектерінің әртүрлі интерпретациялануына мүмкіндік беру) болғанымен, олар жиі қолданылатындықтан оларға осылайша түзетулер енгізу мүмкін болмады. 2024 жылдың сәуір айында glibc-де ISO 2022 CN EXT енгізілімінде қауіпсіздік кемшілігі табылды, нәтижесінде Linux жүйелерінде осы енкодировканы толығымен өшіру ұсынылды.

Артықшылықтар

ISO/IEC 2022 графикалық таңба кодтамаларының толық спектрін GL арқылы қолдануға болады, сондықтан қолжетімді глифтер GR және C1-ді бейнелей алмаудың шектеулеріне ұшырамайды, мысалы, 7 биттік кодтамалармен ғана жұмыс істейтін жүйелердегідей. Осының арқасында мұндай жүйеде көптеген таңбаларды көрсетуге болады. Әдетте, 7 биттік үйлесімділік, ескі жүйелермен артқа қарай үйлесімділікті ескермегенде, аса пайдалы емес. Көбінесе, қазіргі заманғы компьютерлер әрбір байт үшін 8 бит қолданады. Юникодпен салыстырғанда, ISO/IEC 2022 түрлі Шығыс Азия тілдері үшін жеке кодтамалар арасында ауысуға арналған реттік кодтарды пайдаланып, таңбаларды біріктіруден сақталады. Бұл біріктіруге байланысты туындайтын қиындықтарды, мысалы, бір құжатта және қаріпте бірнеше CJK тілін олардың әртүрлі нұсқаларымен қолдаудың қиындығын болдырмайды.

Кемшіліктер

ISO/IEC 2022 – жай-күйлі кодтау болғандықтан, бағдарлама мәтін блогының ортасына таңбаларды іздеу, қосу немесе жою үшін секіре алмайды. Бұл, жай-күйсіз кодтамалармен салыстырғанда, мәтінді өңдеуді өте қиын және баяу жасайды. Мәтіннің ортасында кез келген секіру, шығу тізбегінен кейінгі байттарды түсіндіру үшін алдыңғы шығу тізбегіне сақтық көшірме жасауды қажет етуі мүмкін. ISO/IEC 2022-нің жай-күйлі табиғатынан туындайтын, бірдей және эквивалентті таңбалар G0-ден G3-ге дейін кез келген таңбалар жиынында кодталуы мүмкін, оларды бірлік ауыстырулар немесе GL немесе GR құлыптау ауыстыруларын пайдаланып шақыруға болады. Осының салдарынан таңбалар бірнеше тәсілмен бейнеленуі мүмкін, демек, екі визуалды түрде бірдей және эквивалентті жолдарды теңдік үшін сенімді түрде салыстыру мүмкін емес. DICOM және бірнеше электрондық пошта клиенттері сияқты кейбір жүйелер ISO 2022-нің түрі (мысалы, "ISO 2022 IR 100") қолдауға қоса, бірнеше басқа кодтамаларды да қолдайды. Мұндай өзгерістер мәтінді компьютерлік жүйелер арасында тасымалдауды қиындатады. ISO/IEC 2022-нің 8-биттік басқару таңбаларын бейнелеуімен үйлесімді көп байттық Unicode түрлендіру форматы UTF-1, UTF-8-ге қарағанда әртүрлі кемшіліктерге ие, ал ISO/IEC 2022 қолдауымен басқа таңбалар жиынтығына немесе одан ауысу Unicode құжаттарында әдетте қажет емес. Оның шығу тізбектерінің болуына байланысты, зиянды жолдың (мысалы, сайттар аралық скрипттеу) Unicode-ке дейін кодталғанға дейін жасырылған шабуыл байт тізбектерін құруға болады, бұл оған тазалаудан қашуға мүмкіндік береді. Ал 7-биттік ISO 2022 деректері (ISO 2022 JP емес) шабуылдарды болдырмау үшін HTML5-те алмастыру таңбасына толығымен бейімделеді. Бұл шараны іске асыру, мысалы, Mozilla Thunderbird-де өзара қарымдасу мәселелеріне әкелді, екі ISO 2022 JP ағыны біріктірілген жерде күтпеген "�" таңбалары пайда болды.