Как мне найти длину строки Unicode в Perl?
perldoc
страница длядлина () говорит мне, что я должен использоватьbytes::length(EXPR)
найти строку Unicode в байтах, или ибайтов Страница повторяет это.
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";
Вывод этого скрипта, однако, не согласуется с man-страницей:
ASCII: 26
ASCII bytes: 26
Unicode: 35
Unicode bytes: 35
Мне кажется, что length () и bytes :: length () возвращают одинаковое значение для строк ASCII и Unicode. Мой редактор по умолчанию настроен на запись файлов в формате UTF-8, поэтому я считаю, что Perl интерпретирует весь сценарий как Unicode - означает ли это, что length () автоматически обрабатывает строки Unicode правильно?
Редактировать: Смотрите мой комментарий; мой вопрос не имеет большого смысла, потому что length ()не работает "правильно" в приведенном выше примере - он показывает длину строки Unicode в байтах, а не в символах. Резонанс, который я наткнулся на это, касается программы, в которой мне нужно установить заголовок Content-Lenth (в байтах) в HTTP-сообщении. Я читал об Unicode в Perl и ожидал, что мне придется что-то придумать, чтобы все заработало, но когда length () вернул именно то, что мне было нужно, я был в замешательстве! Смотрите принятый ответ для обзораuse utf8
, use bytes
, а такжеno bytes
в перл.