|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alexey Bavykin 2:5020/400 30 Jan 2008 19:20:04 To : Dmitry E. Oboukhov Subject : Re: и снова о юникоде -------------------------------------------------------------------------------- Dmitry E. Oboukhov -> All @ Sat 26/01/08 21:41 +0300 : DEO> есть задача парсить странички html на которых в куче перемешаны DEO> символы в кодировке koi8r и такого вида конструкции: DEO> а страница DEO> доступна DEO> только для DEO> скрипт работает в локали utf-8. DEO> если контенту сделать такое преобразование: DEO> use Encode qw(encode decode); DEO> ... DEO> $charset='koi8-r'; DEO> ... DEO> $content=encode('utf-8', decode($charset, $content, Encode::FB_QUIET)); из perldoc Encode, вчитайся: CAVEAT: When you run "$octets = encode("utf8", $string)", then $octets may not be equal to $string. Though they both contain the same data, the utf8 flag for $octets is always off. When you encode anything, utf8 flag of the result is always off, even when it contains completely valid utf8 string. See "The UTF-8 flag" below. Hе просто так тут разница в именах переменных ($octets и $string) DEO> теперь я следом делаю: DEO> $content=~s/\&\#(\d{4})\;/pack 'U', $1/eg; Из perldoc -f pack : U A Unicode character number. Encodes to UTF-8 internally Т.е. тут у $content'а взводится "utf-8 flag" Можно сделать так: # Тут у тебя $content будет с зажженным флагом. $content = decode('koi8-r', $content, Encode::FB_QUIET); Потом уже: $content =~ s/\&\#(\d{4})\;/pack 'U', $1/eg; А перед выводом (если надо) - encode в куда нужно. -- Alexey --- ifmail v.2.15dev5.4 * Origin: RTComm.RU (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/61544d68b6513.html, оценка из 5, голосов 10
|