Perl: замена всего unicode x2103 (градусы Цельсия) в файле Perl6::Slurp-ed

Я пытаюсь прочитать текстовый файл UTF8 и заменить все вхождения символов Юникода (градусы Цельсия) какой-либо другой строкой.

#!/usr/bin/env perl
use 5.030;
use warnings;
use utf8;
use Perl6::Slurp;

my $s= "Hello.  This is 2.3℃ .";
$s =~ s/2.3/two-point-three /gms;
$s =~ s/\x{2103}/degrees celsius/gms;
print "STRING: '$s'\n";

my $fs= slurp("test.md");
$fs =~ s/2.3/two-point-three /gms;
$fs =~ s/\x{2103}/degrees celsius/gms;
print "FSYSTM: '$fs'";

и мой файл test.md читается так же, как строка.


Hello.  This is 2.3℃ .

Почему вывод

STRING: 'Hello.  This is two-point-three degrees celsius .'
FSYSTM: 'Hello.  This is two-point-three ℃ .

Можете выложить куда-нибудь test.md, тогда попробуем воспроизвести. Файл может иметь особую кодировку

Håkon Hægland 27.04.2024 09:52

Обратите внимание, что File::Slurper имеет более интуитивно понятный интерфейс.

ikegami 28.04.2024 22:26

Вы также можете обнаружить, что Path::Tiny является полезной альтернативой — среди прочего, у него есть метод slurp_utf8().

Ricky Morse 29.04.2024 15:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам необходимо указать кодировку файла при чтении файла, отличного от ascii, с помощью Perl6::Slurp:

Для меня работает следующее:

my $fs= slurp('<:utf8', "test.md");

Это прочитает файл, а затем декодирует содержимое из UTF8 в Unicode, чтобы Perl мог работать с ним как с Unicode, дополнительную информацию см. в документации perluniintro и Perl6::Slurp.

Придирка: несмотря на то, что написано в СИНОПСИСЕ, вы, вероятно, хотите slurp('<:encoding(utf-8)', 'test.md');. Разница в том, что последний фактически проверяет допустимую кодировку, тогда как первый предполагает utf-8 независимо от фактической кодировки файла.

user20284150 28.04.2024 17:20

Другие вопросы по теме