![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Pheanix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 28.11.2007 Репутация: нет Всего: нет |
Добрый день!
Подскажите пожалуйста. Есть задача: Одна система (неважно какая) принимает почту и кладет текст сообщения в БД MS SQL Но только система не понимает koi8-r , а только win 1251. Причем юзеры посылают письма в разных форматах, кто в plain text, кто в HTML, кто в RTF. Я написал скрипт,который забирает текст из БД перекодирует его и кладет обратно, но только с форматом plain text, а как сделать с другими форматами? Кто может подсказать как написать скрипт на Perl который автоматически перекодировал текст из koi8-r в win1251 при чем независимо от формата. ПОМОГИТЕЕЕЕЕЕЕЕ. Заранее спасибо!!!!!!!!!!!!!!!!!!!!!! |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
Уважаемый Pheanix, независимо от формата перекодировать не получится. Можно сделать перекодировщики для каждого формата.
Кстати RTF с KOI8 я еще не видел -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| Pheanix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 28.11.2007 Репутация: нет Всего: нет |
К сожалению, есть и в RTF.
А если написать для каждого формата перекодировщик и с помощью поиска по шаблону, определять какая кодировка по тегам( к примеру если текст содержит теги "....<html xmlns:....." то это формат html, и.т.д.) А как сделать перекодировщик к html формату? Я что-то такого модуля не нашел. Единственное, чем пользовался - это "use Encode". Но он работает только с plain text! |
|||
|
||||
| dmitryk1 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 10.6.2008 Где: Новосибирск Репутация: нет Всего: 2 |
интересно, а как бы ты в ручную переделал текст в хтмль? Я думаю такого кодировщика в принципе не может быть. Или по шаблонам, то есть обрамить весь текст тегами <body> и внутри заменить все переносы строки разрывами ну и ещё какие-либо правила использовать Цвета поменять, стили приделать, яваскрипт прикрутить... но это и без модуля очень просто делается, или делается специальным дизайнером(человеком). Это сообщение отредактировал(а) dmitryk1 - 20.6.2008, 06:45 |
|||
|
||||
| Pheanix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 28.11.2007 Репутация: нет Всего: нет |
Ок!
Я просто только начал изучать Perl. Подскажите тогда, пожалуйста, как написать шаблон , что бы он заменял пробелами,а лучше вобще стирал, все , что находится к примеру между 2-мя скобками. Что-то вроде такого, но не так: $text=~s/<>/./g; Буду очень благодарен. |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
Это сообщение отредактировал(а) ginnie - 20.6.2008, 13:19 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| Pheanix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 28.11.2007 Репутация: нет Всего: нет |
Спасибо БОЛЬШОЕ.
Справился таким образом: $text=~ s/<([^>]|\n)*>//g; Добавлено через 14 минут и 45 секунд Справится то справился, теги убирает. Вот только вместо тегов остаются пробелы. В итоге нужный текст где- то в середине болтается. Можете подсказать как и от пустого места избавиться? |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
Pheanix, если проблема с удалением многострочного тега, то можно
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| Pheanix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 28.11.2007 Репутация: нет Всего: нет |
Спасибо большое. Но ваш вариант почему-то не сработал.
Нашел такой способ: $text=~ s/^\s+//gm; Теперь я смогу написать скрипт, который сможет перекодировать из любого формата кодировки( koi8-r в win1251). Считаю топик закрытым! ЕЩЕ РАЗ ВСЕМ СПАСИБО!!!!!!!!!!! Жаль не могу никому добавить репутацию, топиков мало у меня. |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
Pheanix, можно попросить пример, где не срабатывает s/<.+?>//gs?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| Pheanix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 28.11.2007 Репутация: нет Всего: нет |
Вот скрипт, на котором я тренеровался(в конце его мои комментарии):
#!/usr/bin/perl -w use Encode; $text ='<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:D="DAV:" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"> <head> <meta http-equiv=Content-Type content="text/html; charset=koi8-r"> <meta name=Generator content="Microsoft Word 12 (filtered medium)"> <style> <!-- /* Font Definitions */ @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0cm; margin-bottom:.0001pt; font-size:11.0pt; font-family:"Calibri","sans-serif";} a:link, span.MsoHyperlink {mso-style-priority:99; color:blue; text-decoration:underline;} a:visited, span.MsoHyperlinkFollowed {mso-style-priority:99; color:purple; text-decoration:underline;} span.EmailStyle17 {mso-style-type:personal-compose; font-family:"Calibri","sans-serif"; color:windowtext;} .MsoChpDefault {mso-style-type:export-only;} @page Section1 {size:612.0pt 792.0pt; margin:2.0cm 42.5pt 2.0cm 3.0cm;} div.Section1 {page:Section1;} --> </style> <!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="1026" /> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1" /> </o:shapelayout></xml><![endif]--> </head> <body lang=RU link=blue vlink=purple> <div class=Section1> <p class=MsoNormal>чУС УЙУФЕНБ ОЕ ТБВПФБЕФ !!!<o:p></o:p></p> <p class=MsoNormal>рТЙНЙФЕ НЕТЩ!!!<o:p></o:p></p> </div> </body> </html> '; $text=~ s/<([^>]|\n)*>//g; ##$text=s/<.+?>//gs; - таким образом я пробовал ваш вариант!!! ##$text=~ s/^\s+//gm; - а этот у меня заработал!!!! open (VYHOD,">путь к файлу")|| die "$!"; my $text1=encode('cp1251',decode('koi8-r',$text)); print VYHOD $text1; |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
Pheanix, $text =~ s/<.+?>//gs; (в строке пропущен символ ~) я предложил вместо $text=~ s/<([^>]|\n)*>//g;.
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 12 Всего: 84 |
Pheanix, чтобы более верно начинать писать скрипты и выявлять больше ошибок добавьте в начало скрипта use strict;.
Примерно так:
|
|||
|
||||
| Pheanix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 28.11.2007 Репутация: нет Всего: нет |
Благодарю за подсказки и сопутствие в этом нелегком пути изучения Perl!
Еще....., совсем забыл, давно , когда регистрировался на форуме неверно забил свой ник. Надо чтобы был "Phoenix", а вот в редактировании профиля где поменять имя не нашел :( Это сообщение отредактировал(а) Pheanix - 20.6.2008, 17:10 |
|||
|
||||
![]()
|
| Правила форума "Perl: CGI программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |