JavaRush /Java блогу /Random-KY /Текстти коддоо ASCII (Windows 1251, CP866, KOI8-R) жана Ю...
articles
Деңгээл

Текстти коддоо ASCII (Windows 1251, CP866, KOI8-R) жана Юникод (UTF 8, 16, 32) - крекерлер менен көйгөйдү кантип чечүү керек

Группада жарыяланган
Бүгүн биз веб-сайтта жана программаларда krakozyabrs кайдан келгени, кандай текст codeдору бар жана кайсынысын колдонуу керектиги жөнүндө сүйлөшөбүз. Келгиле, негизги ASCIIден баштап, анын CP866, KOI8-R, Windows 1251 кеңейтилген versionларынан баштап жана заманбап Юниcode консорциумунун UTF 16 жана 8 codeдоолору менен аяктаган алардын өнүгүү тарыхын кененирээк карап чыгалы Текстти codeдоо ASCII (Windows 1251, CP866, KOI8-R) жана Юниcode (UTF 8, 16, 32) - крекерлер менен көйгөйдү кантип чечүү керек - 1. Мазмуну: Кээ бирөөлөр үчүн бул маалымат керексиздей сезorши мүмкүн, бирок мен сойлоп бараткан кракозябрлерге (окулбаган каармандардын топтому) байланыштуу канча суроо берерин билесизби. Эми мен бардыгын ушул макаланын текстине шилтеме кылып, өзүмдүн каталарымды табууга мүмкүнчүлүк алам. Мейли, маалыматты өздөштүрүүгө даярданыңыз жана окуянын агымын ээрчүүгө аракет кылыңыз.

ASCII - латын алфавити үчүн негизги текст codeдоо

Тексттик codeдоолорду иштеп чыгуу IT индустриясынын калыптанышы менен бир убакта болгон жана бул убакыттын ичинде алар бир топ өзгөрүүлөргө дуушар болушкан. Тарыхый жактан алганда, бардыгы EBCDIC менен башталган, ал орусча айтылышында бир топ диссонант болгон, бул латын алфавитинин тамгаларын, араб цифраларын жана тыныш белгилерин башкаруу символдору менен codeдоого мүмкүндүк берген. Ошентсе да, заманбап текст codeдоолорун иштеп чыгуу үчүн баштапкы чекит катары атактуу ASCII (Америкалык стандарттык маалымат алмашуу codeу, орус тorнде адатта "суроо" деп айтылат) каралышы керек . Ал англис тилдүү колдонуучулар тарабынан эң көп колдонулган биринчи 128 символду - латын тамгаларын, араб сандарын жана тыныш белгилерин сүрөттөйт. ASCIIде сүрөттөлгөн бул 128 символдор ошондой эле кээ бир кызматтык белгилерди камтыган, мисалы кашаалар, хэш белгилер, жылдызчалар ж.б. Чынында, сиз аларды өзүңүз көрө аласыз: Текстти codeдоо ASCII (Windows 1251, CP866, KOI8-R) жана Юниcode (UTF 8, 16, 32) - крекерлер менен көйгөйдү кантип чечүү керек - 2Дал ушул ASCII versionсынын 128 символу стандарт болуп калды жана башка codeдоодо сиз аларды сөзсүз табасыз жана алар ушул тартипте пайда болот. Бирок, бир byte маалыматтын жардамы менен сиз 128 эмес, 256 ар кандай маанилерди codeдой аласыз (эки сегиздин күчү 256га барабар), демек, Асуканын негизги versionсынан кийин бүтүндөй кеңейтилген ASCII codeдоолордун сериясы пайда болду , аларда 128 негизги белгиден тышкары улуттук codeдоо белгилердин (мисалы, орусча) жардамы менен codeдолсо болот. Бул жерде, балким, сыпаттамада колдонулган сан системалары жөнүндө бир аз көбүрөөк айтуу керек. Биринчиден, баарыңарга белгилүү болгондой, компьютер экorк системадагы сандар менен, тактап айтканда, нөлдөр жана бирлер менен гана иштейт («Буль алгебра», эгерде кимдир бирөө аны институтта же мектепте алса). Бир byte сегиз биттен турат, алардын ар бири нөлдөн баштап экиге чейинки экини жана жетинчиге чейинки экини билдирет: Текстти codeдоо ASCII (Windows 1251, CP866, KOI8-R) жана Юниcode (UTF 8, 16, 32) - крекерлер менен көйгөйдү кантип чечүү керек - 3 Мындай конструкциядагы нөлдөрдүн жана бирдиктердин бардык мүмкүн болгон комбинациялары болушу мүмкүн экенин түшүнүү кыйын эмес. Болгону 256. Санды экorк системадан ондукка айландыруу абдан жөнөкөй. Сиз жөн гана экөөнүн бардык күчүн алардын үстүнөн бирди кошуп алышыңыз керек. Биздин мисалда бул 1 (нөлдүн даражасына 2) плюс 8 (3 даражасына эки), плюс 32 (бешинчи даражага эки), плюс 64 (алтынчы даражага), плюс 128 болуп чыгат. (жетинчи бийликке чейин). Жалпы саны ондук системада 233. Көрүнүп тургандай, баары абдан жөнөкөй. Бирок ASCII символдору бар tableга кылдаттык менен карасаңыз, алар он алтылык codeдоодо берилгенин көрөсүз. Мисалы, "жылдызча" Аскидеги 2А он алтылык санына туура келет. Он алтылык санауу системасында араб цифраларынан тышкары А (он дегенди билдирет) дан F (он беш дегенди билдирет) латын тамгалары да колдонуларын билсеңиз керек. Экorк санды он алтылык санга айландыруу үчүнтөмөнкү жөнөкөй ыкманы колдонуу. Маалыматтын ар бир byteы төрт биттен турган эки бөлүккө бөлүнөт. Ошол. Ар бир жарым byteта он алты гана маанини (экиден төртүнчү даражага чейин) экorк форматта codeдосо болот, аны он алтылык сан катары көрсөтүүгө болот. Мындан тышкары, byteтын сол жарымында градустарды скриншотто көрсөтүлгөндөй эмес, нөлдөн баштап кайра санаш керек болот. Натыйжада, биз скриншотто E9 саны codeдолгондугун алабыз. Менин ой жүгүртүүмдүн жүрүшү жана бул табышмактын чечими сизге түшүнүктүү болду деп үмүттөнөм. Келгиле, азыр текстти codeдоо жөнүндө сөз кылалы.

Асуканын кеңейтилген versionлары - CP866 жана псевдографиясы бар KOI8-R codeдоолору

Ошентип, биз ASCII жөнүндө айта баштадык, ал бардык заманбап codeдоолорду (Windows 1251, Юниcode, UTF 8) иштеп чыгуунун баштапкы чекити болгон. Башында ал латын алфавитинин 128 символун, араб цифраларын жана башка нерселерди камтыган, бирок кеңейтилген versionсында маалыматтын бир byteында codeдолгон бардык 256 баалуулуктарды колдонууга мүмкүн болду. Ошол. Аскиге тorңиздин тамгаларынын символдорун кошуу мүмкүн болду. Бул жерде биз текстти codeдоо эмне үчүн зарыл экенин жана эмне үчүн мынчалык маанилүү экенин түшүндүрүү үчүн дагы бир жолу чегинүүгө туура келет . Сиздин компьютериңиздин экранындагы символдор эки нерсенин негизинде түзүлөт - ар кандай символдордун вектордук фигураларынын (көрсөтүүлөрүнүн) жыйындысы (алар сиздин компьютериңизде орнотулган шрифттери бар файлдарда) жана дал ошол нерсени алып чыгууга мүмкүндүк берген code. вектордук фигуралардын бул топтомунан (шрифт файлы) туура жерге киргизүү керек болгон белги. Вектордук формалар үчүн шрифттердин өзү жооптуу экени түшүнүктүү, бирок codeдоо үчүн операциялык система жана анда колдонулган программалар жооп берет. Ошол. сиздин компьютериңиздеги каалаган текст byteтардын жыйындысы болот, алардын ар бири дал ушул тексттин бир символун codeдойт. Бул текстти экранга чыгарган программа (тексттик редактор, браузер ж.б.) codeду талдоодо кийинки символдун codeдоосун окуйт жана ушуну көрсөтүү үчүн туташтырылган керектүү шрифт файлынан тиешелүү вектордук форманы издейт. тексттик document. Баары жөнөкөй жана баналдык. Бул бизге керек болгон ар кандай символду (мисалы, улуттук алфавиттен) codeдоо үчүн эки шарт аткарылышы керек дегенди билдирет: бул символдун вектордук формасы колдонулган шрифтте болушу керек жана бул белги кеңейтилген ASCII codeдоолорунда codeдолушу мүмкүн. бир byteта. Ошондуктан, мындай варианттардын бир топ бар. Орус тorнин символдорун codeдоо үчүн эле кеңейтилген Асканын бир нече түрлөрү бар. Мисалы, CP866 алгач пайда болгон , ал орус алфавитиндеги белгилерди колдонуу мүмкүнчүлүгүнө ээ болгон жана ал ASCIIдин кеңейтилген versionсы болгон. Башкача айтканда, анын үстүнкү бөлүгү жогорудагы скриншотто көрсөтүлгөн Асканын негизги versionсына (128 латын тамгалары, сандар жана башка шылуундар) толугу менен дал келген, бирок CP866 codeдоосу бар tableнын төмөнкү бөлүгүндө көрсөтүлгөн көрүнүшкө ээ болгон. Төмөнкү скриншот жана дагы 128 символду codeдоого уруксат берилген (орусча тамгалар жана ар кандай псевдографиктер): Текстти codeдоо ASCII (Windows 1251, CP866, KOI8-R) жана Юниcode (UTF 8, 16, 32) - крекерлер менен көйгөйдү кантип чечүү керек - 4 Көрүп турасыз, оң тилкеде сандар 8ден башталат, анткени 0дөн 7ге чейинки сандар ASCIIнин негизги бөлүгүнө тиешелүү (биринчи скриншотту караңыз). Ошентип, CP866дагы кириллицадагы «М» тамгасы 9С codeуна ээ болот (ал он алтылык санауу системасында 9 менен тиешелүү сызык менен С саны менен мамычанын кесorшинде жайгашкан), аны бир byte маалыматта жазууга болот. , жана орус тамгалары менен ылайыктуу шрифт бар болсо, бул тамга эч кандай көйгөйсүз текстте пайда болот. Бул сумма кайдан келди?CP866 псевдографиясы ? Кептин баары орусча текст үчүн бул codeдоо графикалык операциялык системалар азыркыдай кеңири таралбаган ошол начар жылдарда иштелип чыккандыгында. Ал эми Dosa жана ушул сыяктуу тексттик операциялык тутумдарда псевдография, жок эле дегенде, кандайдыр бир жол менен тексттердин дизайнын диверсификациялоого мүмкүндүк берди, демек, CP866 жана анын бардык башка курбулары Асуканын кеңейтилген versionларынын категориясынан көп. CP866 IBM тарабынан таратылган, бирок буга кошумча, орус тorнин символдору үчүн бир катар codeдоолор иштелип чыккан, мисалы, KOI8-R бир түргө (кеңейтилген ASCII) таандык кылынышы мүмкүн : Текстти codeдоо ASCII (Windows 1251, CP866, KOI8-R) жана Юниcode (UTF 8, 16, 32) - крекерлер менен көйгөйдү кантип чечүү керек - 5Анын иштөө принциби ошол эле бойдон калууда. CP866 бир аз мурдараак сүрөттөлгөн - Тексттин ар бир белгиси бир byte катары codeдолгон. Скриншот KOI8-R үстөлдүн экинчи жарымын көрсөтөт, анткени биринчи жарымы бул макалада биринчи скриншот көрсөтүлгөн негизги Asuka менен толугу менен шайкеш келет. KOI8-R codeдоо өзгөчөлүктөрүнүн арасында, анын tableсында кириллица тамгалары CP866 жасалгандай, алфавиттик тартипте эмес экенин белгилей кетүү керек. Эгерде сиз эң биринчи скриншотту карасаңыз (баардык кеңейтилген codeдоолорго кирген негизги бөлүк), KOI8-R орус тамгалары латын алфавитинин тиешелүү тамгалары менен tableнын бир уячаларында жайгашканын байкайсыз. столдун биринчи бөлүгүнөн. Бул бир битти (экиден жетинчи даражага же 128ге) ыргытуу менен орус тorнен латын тамгаларына өтүүнүн ыңгайлуулугу үчүн жасалган.

Windows 1251 - ASCIIдин заманбап versionсы жана эмне үчүн жаракалар чыгат

Тексттик codeдоолордун андан аркы өнүгүшү графикалык операциялык системалардын популярдуулукка ээ болушу жана аларда псевдографияны колдонуу зарылчылыгы убакыттын өтүшү менен жоюлушу менен шартталган. Натыйжада, бүтүндөй бир топ түпкүлүгүндө Асуканын дагы эле кеңейтилген versionлары (тексттин бир символу бир byte маалымат менен codeдолгон), бирок псевдографиялык символдорду колдонбогон бир топ пайда болду. Алар Америка Стандарттар Институту тарабынан иштелип чыккан ANSI деп аталган codeдоолорго таандык болгон. Жалпы тил менен айтканда, орус тor колдоого алынган version үчүн кириллица деген аталыш да колдонулган. Буга мисал Windows 1251 болот . Ал мурда колдонулган CP866 жана KOI8-Rден жакшы айырмаланып турган, андагы псевдографиялык символдордун ордун орус типографиясынын жетишпеген символдору (акцент белгисин кошпогондо), ошондой эле славян тилдеринде колдонулган символдор ээлеген. Орусча (украин, белорус ж.б.). ): Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами - 6Орус тorнин codeдоолорунун көптүгүнө байланыштуу, шрифт өндүрүүчүлөр жана программалык камсыздоону өндүрүүчүлөр дайыма баш ооруга дуушар болушкан жана сиз жана мен, урматтуу окурмандар, ошол эле белгилүү мүчүлүштүктөр менен көп кыйынчылыктарга дуушар болчубуз. текстте колдонулган version менен чаташуулар болгондо. Көбүнчө алар электрондук почта аркылуу билдирүүлөрдү жөнөтүүдө жана алууда чыгышат, бул өтө татаал конвертациялоо tableларын түзүүгө алып келген, бул маселени түп-тамырынан бери чече алган эмес, ал эми колдонуучулар кат алышуу үчүн көбүнчө латын тамгаларынын транслитерациясын колдонушкан. CP866, KOI8-R же Windows 1251 сыяктуу орусча codeдоолорду колдонууда жаман сөздөн алыс болуңуз. Чындыгында, орусча тексттин ордуна жаракалар пайда болгон тилдин codeдоосун туура эмес колдонуунун натыйжасы болгон текст кабары башында codeдолгон. Эгер сиз Windows 1251 code tableсын колдонуу менен CP866 аркылуу codeдолгон символдорду көрсөтүүгө аракет кылсаңыз, анда ошол эле шылдың (маанисиз символдордун жыйындысы) билдирүүнүн текстин толугу менен алмаштырып чыгат деп коёлу. Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами - 7Ушундай эле жагдай көбүнчө веб-сайттарды, форумдарды же блогдорду түзүүдө жана орнотууда, орус тамгалары бар текст жаңылыш түрдө сайтта демейки боюнча колдонулган туура эмес codeдоштурууда же көзгө көрүнбөгөн гагды кошо турган туура эмес тексттик редактордо сакталып калганда пайда болот. жылаңач көз менен codeго. Акыр-аягы, көптөгөн адамдар бул кырдаалдан көп codeдоо жана тынымсыз сойлоп чыгуу менен чарчап калышты жана бардык учурдагыларды алмаштыра турган жана окулбаган тексттердин пайда болушу менен көйгөйдү чече турган жаңы универсалдуу вариацияны түзүү үчүн өбөлгөлөр пайда болду. . Мындан тышкары, кытай тor сыяктуу тилдердин көйгөйү бар болчу, ал жерде 256га караганда бир топ тил белгилери бар.

Юниcode - UTF 8, 16 жана 32 универсалдуу codeдоолору

Түштүк-Чыгыш Азия тилдер тобунун бул миңдеген символдорун ASCIIдин кеңейтилген versionларында символдорду codeдоо үчүн бөлүнгөн маалыматтын бир byteында сүрөттөп берүү мүмкүн эмес. Натыйжада универсалдуу текст codeдоштуруунун пайда болушуна кызыкдар болгон көптөгөн IT тармагынын лидерлеринин (программалык камсыздоону чыгаргандар, аппараттык каражаттарды codeдогондор, шрифттерди түзгөндөр) кызматташуусу менен Юниcode (Юниcode Консорциум) деп аталган консорциум түзүлгөн . Юниcode консорциумунун колдоосу астында чыгарылган биринчи вариация UTF 32 болгон . Коддоо аталышындагы сан бир символду codeдоо үчүн колдонулган биттердин санын билдирет. 32 бит 4 byte маалыматка барабар, ал жаңы универсалдуу UTF codeдоосунда бир символду codeдоо үчүн керек болот. Натыйжада, ASCII кеңейтилген versionсында жана UTF-32де codeдолгон тексти бар ошол эле файл, акыркы учурда төрт эсе чоңураак өлчөмдө (салмакта) болот. Бул жаман, бирок азыр бизде UTF аркылуу экиден отуз экинчи даражага барабар болгон бир катар символдорду codeдоо мүмкүнчүлүгү бар ( ар кандай чындап керектүү маанини чоң маржа менен камтый турган миллиарддаган символдор ). Бирок европалык топтун тилдери бар көптөгөн өлкөлөр codeдоодо мынчалык көп сандагы символдорду колдонуунун кереги жок болчу, бирок UTF-32ди колдонууда алар эч кандай себепсиз тексттик documentтердин салмагын төрт эсеге көбөйтүштү. жана натыйжада Интернет-трафиктин көлөмүнүн жана сакталган маалыматтардын көлөмүнүн өсүшү. Бул көп жана мындай калдыктарды эч ким көтөрө алмак эмес. Юниcodeду иштеп чыгуунун натыйжасында, UTF-16 пайда болду , ал ушунчалык ийгorктүү болуп, ал демейки боюнча биз колдонгон бардык символдор үчүн базалык мейкиндик катары кабыл алынган. Ал бир символду codeдоо үчүн эки byte колдонот. Келгиле, бул нерсе кандай экенин карап көрөлү. Windows операциялык тутумунда сиз "Старт" - "Программалар" - "Аксессуарлар" - "Система куралдары" - "Символдор tableсы" жолун кармасаңыз болот. Натыйжада, тутумуңузда орнотулган бардык шрифттердин вектордук формалары менен table ачылат. Эгер сиз "Өркүндөтүлгөн параметрлерден" Юниcode символдорунун топтомун тандасаңыз, анда ар бир шрифт үчүн андагы символдордун толук диапазонун өзүнчө көрө аласыз. Айтмакчы, алардын каалаганын басуу менен, анын эки byteтык codeун UTF-16 форматында көрө аласыз , төрт он алтылык сандан турат: Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами - 8UTF-16да 16 бит менен канча символду codeдосо болот? 65 536 (экиден он алтыга чейин) жана бул Юниcodeдо негизги мейкиндик катары кабыл алынган сан. Мындан тышкары, аны колдонуу менен эки миллионго жакын белгилерди codeдоо жолдору бар, бирок алар тексттин миллион белгиден турган кеңейтилген мейкиндиги менен чектелген. Бирок Юниcode codeдоосунун бул ийгorктүү versionсы да, айталы, программаларды англис тorнде жазгандарга анчалык канааттанган жок, анткени ASCII кеңейтилген versionсынан UTF-16га өткөндөн кийин documentтердин салмагы эки эсеге көбөйгөн (бир byte Аскидеги символ жана YUTF-16дагы бир эле каарман үчүн эки byte). Юниcode консорциумундагы бардыгын жана бардыгын канааттандыруу үчүн, өзгөрүлмө узундуктагы codeдоону ойлоп табуу чечими кабыл алынды . Ал UTF-8 деп аталды. Атында сегизге карабастан, ал чындыгында өзгөрмө узундукка ээ, б.а. Тексттин ар бир символу узундугу бирден алты byteка чейинки ырааттуулукка codeдолушу мүмкүн. Иш жүзүндө, UTF-8 бирден төрт byteка чейинки диапазонду гана колдонот, анткени төрт byte codeдон ары теориялык жактан эч нерсени элестетүү мүмкүн эмес. Андагы бардык латын тамгалары эски ASCIIдегидей эле бир byteка codeдолгон. Белгилей кетчү нерсе, латын алфавитин гана codeдогон учурда, Юниcodeду түшүнбөгөн программалар дагы YTF-8де codeдолгон нерсени окушат. Башкача айтканда, Асуканын негизги бөлүгү жөн гана Юниcode консорциумунун ушул ойлоп тапканына өткөрүлүп берилген. UTF-8деги кириллица символдору эки byteта codeдолгон жана, мисалы, грузин тамгалары үч byteта codeдолгон. Юниcode консорциуму, UTF 16 жана 8 түзгөндөн кийин, негизги көйгөйдү чечти - азыр биздин шрифттерде бирдиктүү code мейкиндиги бар . Эми алардын өндүрүүчүлөрү аны күчтүү жана мүмкүнчүлүктөрүнүн негизинде тексттик белгилердин вектордук формалары менен гана толтура алышат. Жогорудагы "Белгилер tableсында" ар кандай шрифттер ар кандай символдордун санын колдой турганын көрө аласыз. Кээ бир Юниcodeго бай шрифттер абдан оор болушу мүмкүн. Бирок азыр алар ар кандай codeдоо үчүн түзүлгөндүгүндө эмес, шрифт өндүрүүчүсү бирдиктүү code мейкиндигин белгилүү вектордук формалар менен толтургандыгы же толук толтурбаганы менен айырмаланат.

Орус тамгаларынын ордуна жинди сөздөр - аны кантип оңдоо керек

Эми кракозябрлар тексттин ордуна кантип пайда болоорун же башкача айтканда, орусча текст үчүн туура codeдоо кантип тандалганын карап көрөлү. Чындыгында, ал сиз ушул текстти түзгөн же түзөткөн программада же текст фрагменттерин колдонуп codeдо орнотулган. Тексттик файлдарды түзөтүү жана түзүү үчүн мен жеке абдан жакшы, менин оюмча, Html жана PHP редактору Notepad++ колдоном . Бирок, ал жүздөгөн башка программалоо жана белгилөө тилдеринин синтаксисин баса алат, ошондой эле плагиндерди колдонуу менен кеңейтүү мүмкүнчүлүгүнө ээ. Берилген шилтемеден бул сонун программанын деталдуу баяндамасын окуңуз. Notepad++тин үстүнкү менюсунда "Коддоолор" пункту бар, анда сиз учурдагы опцияны демейки боюнча сайтыңызда колдонулганга айландыруу мүмкүнчүлүгүнө ээ болосуз: Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами - 9Joomla 1.5 жана андан жогорку versionсында сайт болгон учурда, ошондой эле ошондой эле WordPress боюнча блог учурда, сиз Кракозябровдун көрүнүшүнөн качышыңыз керек, BOM жок UTF 8 опциясын тандаңыз . BOM префикси деген эмне? Чындыгында, алар YUTF-16 codeдоосун иштеп чыгууда, кандайдыр бир себептерден улам, аларга белги codeун түз ырааттуулукта (мисалы, 0A15) жана тескери (150A) жазуу мүмкүнчүлүгүн кошууну чечишкен. . Ал эми программалар codeдорду кандай ырааттуулукта окууну түшүнүшү үчүн, documentтердин эң башына үч кошумча byte кошуу менен билдирилген BOM (Байт тартиби белгиси же башкача айтканда кол тамга) ойлоп табылган. UTF-8 codeдоосунда Юниcode консорциумунда эч кандай BOM каралган эмес, ошондуктан кол коюу (documentтин башындагы белгилүү кошумча үч byte) кээ бир программаларга codeду окууга жол бербейт. Ошондуктан, файлдарды UTFде сактоодо, биз ар дайым BOM жок (колу жок) параметрди тандап алышыбыз керек. Ошентип, сиз өзүңүздү кракозябрлардын сойлоп кетүүсүнөн алдын ала коргойсуз . Белгилей кетчү нерсе, Windowsтун кээ бир программалары муну жасай алbyte (алар UTF-8де BOMсыз текстти сактай алышпайт), мисалы, ошол эле белгилүү Windows Notepad. Ал documentти UTF-8де сактайт, бирок анын башына кол тамганы (кошумча үч byte) кошот. Анын үстүнө, бул byteтар дайыма бирдей болот - codeду түз ырааттуулукта оку. Бирок serverлерде бул кичинекей нерседен улам көйгөй пайда болушу мүмкүн - шылуундар чыгат. Ошондуктан, эч кандай шартта кадимки Windows блокнотту колдонбоңуз . для редактирования documentов вашего сайта, если не хотите появления кракозябров. Лучшим и наиболее простым вариантом я считаю уже упомянутый редактор Notepad++, который практически не имеет недостатков и состоит из одних лишь достоинств. В Notepad ++ при выборе codeировки у вас будет возможность преобразовать текст в codeировку UCS-2, которая по своей сути очень близка к стандарту Юниcode. Также в Нотепаде можно будет заcodeировать текст в ANSI, т.е. применительно к русскому языку это будет уже описанная нами чуть выше Windows 1251. Откуда берется эта информация? Она прописана в реестре вашей операционной системы Windows — Howую codeировку выбирать в случае ANSI, Howую выбирать в случае OEM (для русского языка это будет CP866). Если вы установите на своем компьютере другой язык по умолчанию, то и эти codeировки будут заменены на аналогичные из разряда ANSI or OEM для того самого языка. После того, How вы в Notepad++ сохраните document в нужной вам codeировке or же откроете document с сайта для редактирования, то в правом нижнем углу редактора сможете увидеть ее название: Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами - 10Whatбы избежать кракозябров, кроме описанных выше действий, будет полезным прописать в его шапке исходного codeа всех страниц сайта информацию об этой самой codeировке, чтобы на serverе or локальном хосте не возникло путаницы. Вообще, во всех языках гипертекстовой разметки кроме Html используется специальное объявление xml, в котором указывается codeировка текста.
<?xml version="1.0" encoding="windows-1251"?>
Прежде, чем начать разбирать code, браузер узнает, Howая version используется и How именно нужно интерпретировать codeы символов этого языка. Но что примечательно, если вы сохраняете document в принятом по умолчанию юниcodeе, это объявление xml можно будет опустить (codeировка будет считаться UTF-8, если нет BOM or ЮТФ-16, если BOM есть). В случае же documentа языка Html для указания codeировки используется элемент Meta, который прописывается между открывающим и закрывающим тегом Head:
<head>
...
<meta charset="utf-8">
...
</head>
Эта запись довольно сильно отличается от принятой в standard в Html 4.01, но fully соответствует стандарту Html 5, и она будет стопроцентно правильно понята любыми используемыми на текущий момент браузерами. По идее элемент Meta с указание codeировки Html documentа лучше будет ставить How можно выше в шапке documentа, чтобы на момент встречи в тексте первого знака не из базовой ANSI (которые правильно прочитаются всегда и в любой вариации) браузер уже должен иметь информацию о том, How интерпретировать codeы этих символов. Ссылка на первоисточник: Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юниcode (UTF 8, 16, 32) — How исправить проблему с кракозябрами
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION