Чтобы убедиться, что вы производите вывод в UTF-8, примените слой utf8
к выходному потоку, используя binmode
open FILE, '>output.html';
binmode FILE, ':utf8';
или в 3-аргументе open
вызов
open FILE, '>:utf8', 'output.html'
Произвольный ввод сложнее.Если вам повезет, то в начале HTML-код сообщит вам свою кодировку:
wget http://www.google.com/ -O foo ; head -1 foo
<!doctype html><html><head><meta http-equiv="content-type" content="text/html;
charset=ISO-8859-1"><title>Google</title><script>window.google=
{kEI:"xgngTYnYIoPbgQevid3cCg",kEXPI:"23933,28505,29134,29229,29658,
29695,29795,29822,29892,30111,30174,30215,30275,30562",kCSI:
{e:"23933,28505,29134,29229,29658,29695,29795,29822,29892,30111,
30174,30215,30275,30562",ei:"xgngTYnYIoPbgQevid3cCg",expi:
"23933,28505,29134,29229,29658,29695,29795,29822,29892,30111,
30174,30215,30275,30562"},authuser:0,ml:function(){},kHL:"en",
time:function(){return(new Date).getTime()},
Ах, вот оно: <meta http-equiv="content-type" <B>content="text/html;
charset=ISO-8859-1</B>">
.Теперь вы можете продолжить читать входные данные как необработанные байты и найти способ декодировать эти байты с помощью известной кодировки. CPAN может помочь с этим.