Jak znaleźć długość ciągu Unicode w Perlu?
Theperldoc
strona dladługość() mówi mi, że powinienem użyćbytes::length(EXPR)
znaleźć ciąg Unicode w bajtach lub ibajty strona to odzwierciedla.
use bytes;
$ascii = 'Lorem ipsum dolor sit amet';
$unicode = 'Lørëm ípsüm dölör sît åmét';
print "ASCII: " . length($ascii) . "\n";
print "ASCII bytes: " . bytes::length($ascii) . "\n";
print "Unicode: " . length($unicode) . "\n";
print "Unicode bytes: " . bytes::length($unicode) . "\n";
Wynik tego skryptu nie zgadza się jednak ze stroną podręcznika:
ASCII: 26
ASCII bytes: 26
Unicode: 35
Unicode bytes: 35
Wydaje mi się, że length () i bytes :: length () zwracają to samo dla ciągów ASCII i Unicode. Mam mój edytor ustawiony na domyślne zapisywanie plików jako UTF-8, więc uważam, że Perl interpretuje cały skrypt jako Unicode - czy ta średnia długość () automatycznie obsługuje łańcuchy Unicode poprawnie?
Edytować: Zobacz mój komentarz; moje pytanie nie ma sensu, ponieważ długość () jestnie działa poprawnie w powyższym przykładzie - pokazuje długość łańcucha Unicode w bajtach, a nie znaków. Rezon, na który natknąłem się pierwotnie, dotyczy programu, w którym muszę ustawić nagłówek Content-Lenth (w bajtach) w wiadomości HTTP. Przeczytałem Unicode w Perlu i spodziewałem się, że będę musiał zrobić trochę fanciness, aby wszystko działało, ale kiedy length () zwróciło dokładnie to, czego potrzebowałem od razu, byłem zdezorientowany! Zobacz zaakceptowaną odpowiedź, aby zobaczyć przegląduse utf8
, use bytes
, ino bytes
w Perlu.