რა არის ეს ხელსაწყო?
მარტივი ASCII ტექსტისთვის (ინგლისური ასოები, ციფრები, ძირითადი პუნქტუაცია) სიმბოლოების რაოდენობა და ბაიტების რაოდენობა ერთი და იგივე რიცხვია — თითოეული სიმბოლო იკავებს ზუსტად ერთ ბაიტს UTF-8-ში. როგორც კი ტექსტი მოიცავს მახვილიან ასოებს, ჩინურ/იაპონურ/კორეულ სიმბოლოებს, კირილიცას, არაბულს, ემოჯის ან უმეტეს სხვა არა-ASCII სიმბოლოს, ეს აღარ არის მართალი: ერთ სიმბოლოს შეუძლია დაიკავოს 2, 3 ან 4 ბაიტი UTF-8-ში და 2 ან 4 ბაიტი UTF-16-ში.
ეს მნიშვნელოვანია ყოველთვის, როცა სისტემას აქვს შეზღუდვა ბაიტებში და არა სიმბოლოებში — SMS შეტყობინებები, მონაცემთა ბაზის სვეტების ზომები, API-ის დატვირთვის შეზღუდვები და ზოგიერთი სოციალური პლატფორმა ყველა ბაიტებში ზომავს, არა სიმბოლოებში, ამიტომ იგივე ტექსტმა შეიძლება ჩუმად გადააჭარბოს ლიმიტს იმის მიხედვით, თუ რომელ ენას ან სიმბოლოებს შეიცავს.
რატომ გამოვიყენო ის?
- აჩვენებს სიმბოლოების რაოდენობას, UTF-8 ბაიტებს და UTF-16 ბაიტებს გვერდიგვერდ.
- სწორად ითვლის ემოჯის და სხვა სიმბოლოებს Basic Multilingual Plane-ის გარეთ, როგორც ერთ სიმბოლოს, არა ორს.
- პირდაპირ განახლდება ბეჭდვისას — არავითარი ღილაკის დაჭერა არ სჭირდება.
- მთლიანად მუშაობს თქვენს ბრაუზერში — ატვირთვის გარეშე.
- უფასო, რეგისტრაციის გარეშე, შეზღუდვების გარეშე.
როგორ გამოვიყენო
- აკრიფეთ ან ჩასვით ტექსტი ველში.
- წაიკითხეთ სიმბოლოების რაოდენობა, UTF-8 ბაიტების რაოდენობა და UTF-16 ბაიტების რაოდენობა ქვემოთ — ისინი განახლდება ბეჭდვისას.
მაგალითი
შეყვანა
Hello, 世界! 🌍შედეგი
12 სიმბოლო, 19 UTF-8 ბაიტი, 26 UTF-16 ბაიტიASCII ნაწილი ("Hello, " და "! ") იკავებს 1 ბაიტს სიმბოლოზე UTF-8-ში. თითოეული ჩინური სიმბოლო იკავებს 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 "სუროგატული" კოდის ერთეულების წყვილი, რასაც გაუბრალოებული დათვლის მეთოდები 2 სიმბოლოდ ითვლიან. ეს ხელსაწყო სწორად ითვლის Unicode კოდის წერტილებს, ასე რომ ემოჯი ითვლება 1 სიმბოლოდ, რაც შეესაბამება იმას, თუ რამდენ სიმბოლოს ხედავს ადამიანი რეალურად.
ეს იგივეა, რაც სიტყვების მთვლელის ხელსაწყო?
არა — სიტყვების მთვლელი ფოკუსირებულია სიტყვების და წინადადებების რაოდენობაზე წერისთვის. ეს ხელსაწყო კონკრეტულად ეხება ბაიტების ზომას სიმბოლოების რაოდენობასთან შედარებით, რაც მნიშვნელოვანია ტექნიკური ლიმიტებისთვის და არა სიტყვების რაოდენობის მოთხოვნებისთვის.
იტვირთება ჩემი ტექსტი სადმე?
არა. დათვლა ხდება ლოკალურად თქვენს ბრაუზერში JavaScript-ის ჩაშენებული ტექსტის კოდერის გამოყენებით; არაფერი იგზავნება სერვერზე.