Мне было трудно конвертировать целое Perl приложение, но я почти сделал это. Тем не менее, я все еще сталкиваюсь с проблемой, которую не могу решить.
Один из моих сценариев создает файл CSV и автоматически загружает его на компьютер пользователя.
Сама загрузка выполняется этот фрагмент кода:
print $go_cgi->header(
-type => "application/x-download",
-Content_Disposition => "attachment; filename=$gs_name",
-Content_length => -s $gs_path,
);
open(my $lo_handle, "<", $gs_path) or die("open failed: $!");
binmode $lo_handle;
while ( <$lo_handle> ) {print $_;}
close $lo_handle;
Где $ go_cgi - мой CGI-объект, $ gs_name содержит имя загруженного файла, а $ gs_path содержит локальный путь к файлу на сервере.
До тех пор, пока файл CSV не содержит какой-либо указанный в UTF-8 символ c, проблем нет, но если это так, скачанный файл не видится как UTF-8, закодированный на клиенте, тогда как на сервере. Я предполагаю, что какое-то преобразование где-то выполняется, но я не понимаю, почему, поскольку я думал, что команда binmode сделает это безопасным.
Может кто-нибудь сказать мне, как решить эту проблему, пожалуйста?
Заранее большое спасибо.