CodeKitHub
Мәтін құралдары

Байт есептеуіші — Таңбалар саны мен байт өлшемі

Соңғы жаңарту:

Мәтінді теріңіз немесе қойыңыз және оның қанша таңбадан тұратынын UTF-8 және UTF-16 форматтарында нақты қанша байт алатынымен салыстырып, тікелей көріңіз — осы екі сан ASCII-ден тыс таңбалар (екпін белгілері, CJK мәтіні, эмодзи) пайда болғаннан кейін бірден ажырай бастайды.

0
Characters
0
UTF-8 bytes
0
UTF-16 bytes

Бұл құрал не істейді?

Кәдімгі ASCII мәтіні үшін (ағылшын әріптері, сандар, негізгі тыныс белгілері) таңбалар саны мен байт саны бірдей сан болады — әрбір таңба UTF-8-де дәл бір байт алады. Мәтінде екпінді әріптер, қытай/жапон/корей таңбалары, кириллица, араб жазуы, эмодзи немесе басқа ASCII-ден тыс таңбалардың көбісі болғанда, бұл шындыққа сай келмейді: бір таңба UTF-8-де 2, 3 немесе 4 байт, ал UTF-16-да 2 немесе 4 байт алуы мүмкін.

Бұл жүйеде таңбалар емес, байттар бойынша шектеу болғанда маңызды болады — SMS хабарламалары, дерекқор бағандарының өлшемдері, API жүктемесінің шектеулері және кейбір әлеуметтік платформалардың барлығы таңбалармен емес, байттармен өлшенеді, сондықтан бірдей мәтін оның құрамындағы тіл немесе таңбаларға байланысты байқаусыз шектен асып кетуі мүмкін.

Оны неге пайдалану керек?

  • Таңбалар санын, UTF-8 байттарын және UTF-16 байттарын қатар көрсетеді.
  • Эмодзи мен Negizgi Көптілді Жазықтықтан (Basic Multilingual Plane) тыс басқа таңбаларды дұрыс, бір таңба ретінде санайды, екі емес.
  • Теру кезінде тікелей жаңарады — түймені басудың қажеті жоқ.
  • Толығымен браузеріңізде жұмыс істейді — жүктеп салу қажет емес.
  • Тегін, тіркеусіз, шексіз.

Оны қалай пайдалану керек

  1. Мәтінді өріске теріңіз немесе қойыңыз.
  2. Оның астындағы таңбалар санын, UTF-8 байт санын және UTF-16 байт санын оқыңыз — олар теру кезінде жаңарып отырады.

Мысал

Енгізу

Hello, 世界! 🌍

Нәтиже

12 таңба, 19 UTF-8 байт, 26 UTF-16 байт

ASCII бөлігі ("Hello, " және "! ") UTF-8-де әр таңбаға 1 байт алады. Әрбір қытай таңбасы 3 байт алады, ал эмодзи 4 байт алады — сондықтан байт саны таңбалар санынан айтарлықтай жоғары.

Кең таралған қолданулар

  • Көптілді өнім сипаттамасының таңбалар санына емес, байт ұзындығына анықталған дерекқор бағанына сыятынын тексеру.
  • SMS сегменттерін пайдалануды бағалау, себебі SMS байт өлшеміне қарай тарифтеледі және бөлінеді, ал латын емес мәтіннің әр сегментке шегі басқаша.
  • API жүктемесінің немесе форма өрісінің жіберер алдында байтқа негізделген өлшем шегінен аспайтынын тексеру.
  • Байтқа негізделген ұзындықты тексеретін жүйенің неге "қысқа көрінетін" жолды қабылдамайтынын түсіну.

Жиі қойылатын сұрақтар

Неге таңбалар саны мен байт саны сәйкес келмейді?

Unicode мәтіні байт түрінде сақталады, ал әрбір таңбаға қанша байт қажет болатыны кодировкаға және таңбаның өзіне байланысты. UTF-8-де ASCII таңбалары 1 байт, екпінді латын әріптерінің көбісі және кириллица/грек/иврит/араб әріптері 2 байт, CJK таңбаларының көбісі 3 байт, ал эмодзи әдетте 4 байт алады. Таңбалар саны олардың қалай сақталғанына қарамастан, жай ғана символдарды санайды.

Байт шегі бар өріс үшін қай байт санын қолдануым керек?

Жүйе мәтінді сақтау немесе тасымалдау үшін нақты қолданатын кодировканы қолданыңыз — қазіргі заманғы веб API, дерекқорлар мен файлдардың көбісі UTF-8 қолданады, сондықтан UTF-8 байт саны әдетте маңызды болады. Кейбір ескі жүйелер (мысалы, Windows/Java-ның ішкі жол өңдеуі) UTF-16 қолданады.

Бұл құрал эмодзиді дұрыс санай ма?

Иә. Көптеген эмодзи ішкі жағынан UTF-16 "алмастырушы" (surrogate) код бірліктерінің жұбы ретінде сақталады, оларды қарапайым санау әдістері 2 таңба деп санайды. Бұл құрал Unicode код нүктелерін дұрыс санайды, сондықтан эмодзи адам нақты көретін таңбалар санына сәйкес 1 таңба ретінде саналады.

Бұл Сөз есептеуіші құралымен бірдей ме?

Жоқ — Сөз есептеуіші жазу үшін сөздер мен сөйлемдер санына назар аударады. Бұл құрал арнайы байт өлшемін таңбалар санымен салыстырады, бұл сөз саны талаптарына емес, техникалық шектеулерге қатысты маңызды.

Менің мәтінім қайдағыдыр жүктеле ме?

Жоқ. Санау JavaScript-тің ендірілген мәтін кодерін пайдаланып, браузеріңізде жергілікті түрде жүреді; серверге ешнәрсе жіберілмейді.