powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl JSON и UTF-8 - не могу правильно раскодировать данные
3 сообщений из 3, страница 1 из 1
Perl JSON и UTF-8 - не могу правильно раскодировать данные
    #39614056
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть hash с кириллицей, хранится в $data.
Сохраняю его в файл таким образом:
Код: php
1.
2.
3.
4.
5.
6.
7.
use utf8;
use Encode;
use JSON;
my $json = JSON->new->allow_nonref->allow_blessed->convert_blessed->relaxed;
open(JSON, ">:utf8", $file);
print JSON $json->encode($data);
close(JSON);


Сохраняется нормально, в файле корректное содержимое в UTF-8.

Затем мне эти данные нужно считать обратно.
Делаю так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
use utf8;
use Encode;
use JSON;
my $json = JSON->new->allow_nonref->allow_blessed->convert_blessed->relaxed;
open(JSON, "<:utf8", $file);
read(JSON, my $buff, $size);
close(JSON);
$buff = $json->decode($buff);
$data->{$_} = ($buff->{$_}) foreach (keys %$buff);
print Dumper($data);


Все почти нормально, но на строке print выдает предупреждение "Wide character".

Если перед $json-decode делаю $json->utf8, тогда вообще не работает (JSON вылетает с ошибкой Wide character).
use feature qw(unicode_strings) не помогает.

Помогает сделать $buff = Encode::encode_utf8($buff) перед декодированием.
Но мне кажется, что тут что-то не так — я ведь данные уже считал в UTF-8 и если их вывести на юникодную консоль, то выводится правильно и без предупреждения "Wide character". Мне кажется, что я JSON как-то неправильно использую.
Или так и должно быть?
...
Рейтинг: 0 / 0
Perl JSON и UTF-8 - не могу правильно раскодировать данные
    #39614500
scrip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Предупреждение "Wide character" в print говорит о том, что перл не знает кодировку STDOUT.

Нужно явно сказать об этом
либо при запуске скрипта (man perlrun):
Код: powershell
1.
perl -C myscript.pl



либо в коде:
Код: php
1.
use open ':std' => ':utf8';



JSON скорее всего вообще ни при чём.
...
Рейтинг: 0 / 0
Perl JSON и UTF-8 - не могу правильно раскодировать данные
    #39614544
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня в скриптах всегда указывается binmode(STDOUT,':utf8').
Да и кириллицу (которая в UTF-8) в консоль выводится нормально.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl JSON и UTF-8 - не могу правильно раскодировать данные
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]