Кіріспе

Жапондық таңба кодтамасы

Shift JIS (Shift Japanese Industrial Standards, сондай-ақ SJIS, MIME атауы Shift JIS, Solaris жүйелерінде PCK деп белгілі) – Shift JIS жапондық веб-сайттар үшін екінші ең көп қолданылатын таңба кодтамасы, ол jp доменіндегі сайттардың 5,2%-ында қолданылады, ал UTF-8 жапондық веб-сайттардың 94,8%-ында қолданылады.

Құрылымы

Shift JIS – бұл JIS X 0201:1997 бір байтты кодтаудың кеңейтілген нұсқасы, ол JIS X 0201-де белгіленбеген кодтық ұяларды пайдаланып, екі байтты JIS X 0208:1997 таңбалар жиынтығын кодтайды. Екі байтты таңбалардың бастапқы байттары 0xA1-ден 0xDF-қа дейінгі бір байттық диапазонмен 64 жартылай енді катакана таңбалары бойынша "ығыстырылады". 0x00-ден 0x7F-қа дейінгі бір байттық таңбалар ASCII кодтамасына сәйкес келеді, бірақ 0x5C мекенжайындағы йен таңбасы (U+00A5) және 0x7E мекенжайындағы сызық (U+203E) ASCII таңбалар жиынтығындағы кері қисық сызық пен тильдені алмастырады (ASCII-ден бұл ауытқулар JIS X 0201 стандартымен үйлеседі). 0xA1-ден 0xDF-қа дейінгі бір байттық таңбалар JIS X 0201 стандартында кездесетін жартылай енді катакана таңбаларымен сәйкес келеді. Екі байттық таңбалар үшін бірінші байт әрқашан 0x81-ден 0x9F-қа дейінгі немесе 0xE0-ден 0xEF-қа дейінгі диапазон ішінде болады (бұл диапазон JIS X 0201 стандартында белгіленбеген). Егер бірінші байт тақ болса, екінші байт 0x40-тан 0x9E-ға дейін болуы керек (бірақ 0x7F-қа тең болмауы керек); егер бірінші байт жұп болса, екінші байт 0x9F-тан 0xFC-ға дейін болуы керек. Shift JIS екі байттық таңбаның бірінші байтының жоғарғы биті орнатылғанын (0x80–0xFF) кепілдік береді; екінші байттың мәні жоғары немесе төмен болуы мүмкін. 0x40–0x7E байттық мәндердің кодтық сөздердің екінші байты ретінде пайда болуы Shift JIS-тің сенімді анықталуын қиындатады, себебі ASCII таңбалары үшін де осы кодтар қолданылады. Бір байттық мән бірінші немесе екінші байт бола алатындықтан, жолдарды іздеу қиын, өйткені қарапайым іздеулер таңбаның екінші байтын және келесі таңбаның бірінші байтын сәйкестіре алады, бұл жарамды Shift JIS таңбасы емес. Жолдарды іздеу алгоритмдері Shift JIS стандартына сәйкес жасалуы тиіс.

Бір-біріне үйлесімділік

Shift JIS, JIS X 0201 бір байттық кодтамамен толық кері үйлесімді, яғни кез келген жарамды JIS X 0201 жолы Shift JIS жолының да жарамдысы болып табылады. Shift JIS-ке кодтау үшін JIS X 0208-дегі екі байттық таңбаларды түрлендіру қажет. Екі байттық JIS X 0208 тізбегі үшін, тиісті Shift JIS байттарына түрлендіру мынадай:

Бәсекелес 8 биттік EUC JP форматы, жартылай ені бар катакананы қолдамайды, JIS X 0208 кодтық ұпайларына таза және тікелей түрлендіруге мүмкіндік береді, себебі жоғары биті орнатылған барлық байттар екі байттық таңбаның бөліктері болып табылады және ASCII диапазонындағы барлық кодтар бір байттық таңбаларды көрсетеді.

Қолданылуы

Shift JIS форматында жазылған HTML, ASCII ретінде қате белгіленген жағдайда да, белгілі бір деңгейде түсіндіріле алады, әсіресе таңбалар жинағы тегі құжаттың басында болса. Себебі HTML тегтері мен өрістерінің басталуы мен аяқталуын білдіретін маңызды символдар (<, >, /, ", &, ;) ASCII-дегідей байттармен кодталған, және бұл байттар екі байттық тізбектерде кездеспейді. Shift JIS-ті C сияқты бағдарламалау тілдеріндегі жолдарда қолдануға болады, бірақ бірнеше мәселені ескеру қажет. Біріншіден, 0x5C, әдетте кері қисық сызық, Shift JIS форматында жартылай енді yen таңбасын (¥) білдіреді. Бағдарламашы мұны білген жағдайда, I/O жүйесі Shift JIS шығысын қолдаса, printf("ハローワールド¥n"); (мұнда "ハローワールド" - "Сәлем, әлем", ал ¥n - басқару тізбегі) сияқты команданы пайдалануға болады. Екіншіден, 0x5C байты екі байттық символдың екінші байты ретінде пайда болғанда мәселе тудырады, себебі ол басқару тізбегі ретінде қабылданады, егер одан кейін тағы бір 0x5C байты келмесе, бұл түсіндіруді бұзады.

Бірнеше нұсқасы

Shift JIS-тің көптеген нұсқалары бар. Кеңейтуге екі мүмкіндік бар:

Біріншіден, JIS X 0208 Shift JIS-те оған арналған 94×94 кодтау кеңістігінің барлығын толтырмайды, демек, мұнда тағы да көп таңбаларды қоюға болады. Бұл, іс жүзінде, Shift JIS-тің өзіне емес, JIS X 0208-ге қосымшалар болып табылады. Екіншіден, Shift JIS JIS X 0201 және JIS X 0208 үшін қажеттіден артық кодтау кеңістігіне ие (төмендегі § Shift JIS байт картасына қараңыз), және бұл кеңістік тағы да көп таңбалар үшін (бір байттық немесе екі байттық таңбалар түрінде) қолданылады.

Windows-932 / Windows-31J жүйелері

Ең танымал кеңейтім – Windows код беті 932 (CCSID, сонымен қатар IBM-нің Shift JIS кеңейтуіне қолданылады), ол IANA-да Shift JIS-тен бөлек "Windows 31J" ретінде тіркелген. Бұл Microsoft арқылы танымал болды, бірақ Microsoft өзі Windows 31J атауын мойындамайды және оның орнына осы нұсқаны "shift jis" деп атайды. IBM-нің 943 код бетінде Microsoft-тың 932 код беті сияқты екі байттық кодтар бар, ал IBM-нің 932 код бетінде кеңейтімдер аз (Microsoft-тың NEC-тен енгізгендерін қоспағанда) және JIS X 0208 стандартының 1978 жылғы басылымындағы символдар тәртібі сақталады, 1983 жылғы стандарттағы символдардың ауыстырылуын іске асырудың орнына. Windows 31J 0x5C-ге U+005C КЕРІ СЫЗЫҚ (backslash) символын, ал 0x7E-ге U+007E ТИЛЬДЕ (tilde) символын тағайындайды, бұл US ASCII стандартына сәйкес келеді. Дегенмен, Windows-тағы көптеген жергілікті шрифттер JIS X 0201 үйлесімділігі үшін U+005C символын Йен белгісі ретінде көрсетеді. Ол бірнеше кеңейтімдерді қамтиды, атап айтқанда "NEC арнайы символдары (13-қатар), NEC IBM кеңейтімдерін таңдауы (89-92 қатарлар) және IBM кеңейтімдері (115-119 қатарлар)". Windows codepage 932 – HTML5 пайдаланатын W3C/WHATWG кодтау стандартында қолданылатын нұсқа, онда JIS X 0208 кестесінде Windows 31J-ден "IBM және NEC-тен бұрынғы жеке меншік кеңейтімдер" кірген, сондай-ақ "shift jis" атауын "windows 31j" атауымен алмастыра отырып, "қолданыстағы контентпен үйлесімді болу" мақсатын көздейді.

Макаяпондық

Shift JIS классикалық Mac OS-тен шыққан нұсқасы (x mac japanese, Code page 10001). Бұл вариант KanjiTalk 7 нұсқасында енгізілді. Дегенмен, Mac OS-тің кейбір қаріптері басқа варианттарды қолданды. Сай Минчо және Чу Готик MacJapanese-тің "PostScript" вариантында, оған қосымша тік көрсету пішіндері және NEC арнайы символдарына негізделген, кеңейтілген арнайы символдардың басқа жиынтығы кірді. Олардың кейбіреулері тек қаріптердің басылымдық нұсқаларында ғана қолжетімді болды. KanjiTalk 6 нұсқасында қолданылатын стандартты вариант тік көрсету пішіндерін 10 қатар төмен орналастырды, сондай-ақ 13-қатарда NEC кеңейтімдік схемасын қолданды.

Shift_JISx0213 және Shift_JIS-2004

Жаңа JIS X 0213 стандарты Shift JIS кеңейтілген нұсқасын Shift JISx0213 (стандарттың бұрынғы нұсқасында) немесе Shift JIS 2004 деп атайды. Бұл стандартты Shift JIS-тің супержиынтығы. JIS X 0213 стандартының екі жазықтығындағы бөлінген қатарларды көрсету үшін Shift JIS 2004 келесі кодтық нүктелерді бейнелеу әдісін қолданады. Жоғарыда көрсетілген екі байттық Shift JIS 2004 тізбегі, жазықтық (面) нөмірі (1 немесе 2), қатар (区) нөмірі (1–94) және ұяшық (点) нөмірі (1–94) болып табылады. Ку және он сандары сәйкесінше және болып табылады, мұндағы – берілген жазықтықты сілтемелейтін екі байттық JIS тізбегі. Осы таңбалар жиынтығын EUC JIS 2004, EUC JP негізіндегі баламасы да бейнелей алады. Кейбір қосымшалар танымал Shift JIS кеңейтімдерімен, соның ішінде веб-стандарттарда қолданылатын Windows кодық беті 932 (жоғарыда қараңыз) арасында қайшылық тудыруы мүмкін. Мысалы, JIS X 0213 стандартындағы (бастауы 硃, 硎, 硏) 1-қатардың 89-қатарын веб-стандарттарда анықталған JIS X 0208 нұсқасындағы (бастауы 纊, 褜, 鍈) 89-қатармен салыстырыңыз. Сонымен қатар, кейбір таңбалар Unicode таңбаларына BMP-ден тыс сәйкестендіріледі.

Басқа нұсқалар

0xF5-тен 0xF9 байттарымен (JIS X 0208 үшін қолданылатын аймақтан тыс) кеңістік жапондық ұялы телефон операторларымен электрондық поштада пайдаланылатын пиктограммалар үшін қолданылады. KDDI одан да әрі барып, 0xF3 және 0xF4 байттарымен кеңістікте жүздеген басқаларын анықтайды. Бұдан асып, Shift JIS-те көптеген шағын өзгерістер жасалды, кейде жекелеген символдар өгертілді. Бұл кеңейтулер мен нұсқалардың көпшілігі IANA тіркеуіне ие емес, сондықтан кеңейтулер қолданылса, шатасу мүмкіндігі зор. C және осыған ұқсас бағдарламалау тілдерінің бастапқы кодтарында Shift JIS-ті кодтау үшін қолданылуға тиіс нұсқа бар. Бұл нұсқа екі байттық символдың екінші байты ретінде 0x5C байты пайда болса, оны екі еселейді, бірақ ол бір "¥" (ASCII: "\") символы ретінде пайда болса, екі еселенбейді, себебі 0x5C – қашу тізбегінің басталуы. Осы мәселені шешудің ең жақсы жолы – Shift JIS-ті осылай кодтайтын арнайы редакторды пайдалану.

JIS X 0208:1997 анықтамасы бойынша

Төмендегі кесте стандартты Shift JIS (JIS X 0208:1997 стандартына сәйкес) кодировкасындағы ағындағы әрбір байттың толық мағынасын көрсетеді.

Жабдықтаушы немесе JIS X 0213 кеңейтулері бар

JIS X 0208:1997 стандартында бір байттық кодтарға немесе бастапқы байттарға пайдаланылмаған кейбір байттар белгілі бір кеңейтулерде қолданылады, осының нәтижесінде төмендегі кестеде егжей-тегжейлі көрсетілген орналасу туындайды.