LINUX.ORG.RU

perl + utf: консоль против Qt


0

0

В скрипте нужно одновременно выводить и в графическое окно (Qt), и в консоль. Использую прагму

use utf8

В Qt - всё пучком, но с консолью проблема. Либо строки для консоли пишу в кодировке локали, тогда получаю перед выполнением скрипта

Malformed UTF-8 character (unexpected non-continuation byte 0x20, immediately after start byte 0xca) at ./script.pl line 45.

Либо пишу эти строки в utf8, но тогда при попытке printf <строка> получаю

<то, что получится, если utf-8 прочитать как koi8-r> Wide character in print at ./script.pl line 45.

Первое, понятно, менее критично, но хотелось бы избежать этих сообщений и сделать скрипт независящим от локали

Подскажите пожалуйста, что можно сделать

★★★★★

Попробуй binmode(STDOUT, ":locale"). А ещё лучше, посмотри perlunicode(1) и Encode(3) на предмет разницы между byte/character, и перехода между ними.

alexs
()
Ответ на: комментарий от alexs

> Попробуй binmode(STDOUT, ":locale"). 

Это в какой версии такой слой появился? В v5.8.8 такого нет, обходится так:

binmode STDOUT, ":encoding($ENV{LC_CTYPE})";

anonymous
()
Ответ на: комментарий от alexs

Спасибо, вроде разобрался.

Если локаль UTF-8, установить binmode для стандартного вывода в UTF-8, а если 8-битная, то выводить так

printf(encode("<кодировка>","<строка>"))

Осталось только проанализировать локаль, благо print один на всю программу, в отдельной процедуре :)

Спасибо!

router ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.