Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > utf2win |
Автор: rcdimon 4.2.2006, 14:29 | ||||||||
Есть строка, в utf8 и мне нужно ее перекодировать в win-1251 для вывода на экран! Для этого я неизвестно где взял вот такую процедуру
Если в нее сунуть данные из переменной она ответит пустой строкой! Но если считать данные из файла тоже в кодировке utf8 То она переконвертирует. Тогда я свою переменную сначала пихал в файл, потом читал его и вводил в процедуру- тогда все ОК. Но прямо из переменной не хочет конвертировать и все! Тогда я решил проверить чем же отличаются данные из файла и из переменной. Если просто вывести на экран- то ничем. Для детальной проверки сделал так
и у меня получились очень интерсеные результаты ![]() Из файла вот:
а из переменной вот
Откуда код символа может быть 1082, 180 и т.д! Я просто в шоке.. Помогите пожалуйста с перекодировкой! |
Автор: sharq 4.2.2006, 15:42 | ||
rcdimon perldoc perlunicode perldoc perluniintro
![]() |
Автор: rcdimon 4.2.2006, 16:06 |
Software error: Cannot decode string with wide characters at q:/usr/perl58/lib/Encode.pm line 186. For help, please send mail to the webmaster (rcdimon), giving this error message and the time and date of the error. Добавлено @ 16:08 Кстати если интересно откуда я беру данные для перекодировки- то я получаю их из модуля XML::RSS и пытаюсь их перекодировать в windows-1251 а XML::RSS в процессе своей работы входящие в него данные перекодирует в UTF-8 |
Автор: sharq 4.2.2006, 17:37 | ||
rcdimon ты мой пример запускал? у меня вот что:
|
Автор: rcdimon 4.2.2006, 20:29 |
ДА. Работает если давать ему нормальные данные... НО ![]() Software error: Cannot decode string with wide characters at q:/usr/perl58/lib/Encode.pm line 186. For help, please send mail to the webmaster (rcdimon), giving this error message and the time and date of the error. |
Автор: rcdimon 4.2.2006, 22:15 |
Короче rod() от символов получается больше чем 255. Поэтому он и не хочет эти символы перекодировать! А почему такие символы берутся- непонятно ![]() |
Автор: korob2001 5.2.2006, 03:27 | ||
|
Автор: rcdimon 5.2.2006, 08:52 |
А никак нельзя обойтись без подключения нестандартного модуля? |
Автор: Sadok 6.2.2006, 11:13 | ||||
rcdimon
Вот тебе хэш,по нему и заменяй
|
Автор: rcdimon 6.2.2006, 13:24 |
Пасиба ![]() |
Автор: nitr 14.2.2006, 01:40 | ||
|
Автор: sharq 14.2.2006, 11:08 |
nitr, попробуй то же самое сделать через tr и задание диапазона значений (значения у тебя ведь попорядку идут). ![]() Зачем в ручную конвертировать, это же не транслит? В perl 5.8.x - есть модуль Encode, который входит в стандартную поставку perl. (!) В perl 5.6.x - можно используя дополнительные модули, например, cyrillic или Text::Iconv. Всем советую переходить на perl 5.8.7 - последюю стабильную версию perl и использовать встроенные средства. ![]() |
Автор: nitr 14.2.2006, 12:28 |
=) Ему почему-то так не хотелось... И ещёё раз повторяюсь, на многих шеллах перл 5.004 и 5.005, и бывает урезаны модули, так что всё ОК думаю ![]() |
Автор: sharq 14.2.2006, 14:29 |
к чертям такие шеллы! Нормальная support-команда достаточно хорошо следит за своим программным обеспечением. |
Автор: nitr 14.2.2006, 17:05 |
Я думаю, скорее про халявные говрил ;) |
Автор: rcdimon 15.2.2006, 11:51 | ||
Вот когда летом, наконец, поставлю на площадку свой севрер, вот тогда будте УВЕРЕНЫ! У меня стоит самый новый перл и модули, какие мне нужны ![]() |
Автор: nitr 16.2.2006, 06:19 | ||
rcdimon, тож пригодиться:
|
Автор: rcdimon 21.2.2006, 16:50 |
Где Text::Iconv можно взять для PPM ? |
Автор: sharq 21.2.2006, 17:25 |
rcdimon, http://theoryx5.uwinnipeg.ca/ppms/. ![]() |
Автор: rcdimon 24.2.2006, 13:44 |
Признаться честно- так и не нашел где же там его можно скачать.... ![]() |
Автор: rcdimon 24.2.2006, 16:23 | ||
Все, нашел. Нужно было всего-то в Google.com набрать Text::Iconv ppd и перейти по первой ссылке ![]() НО он не может мне помочь! Глюки какие-то!
Выдает ужасную абракадабру! Прошу еще раз обратить внимание- что коды символов, котрые выдает XML::RSS- ord() бывают больше тысячи! Если взять просто строку в UTF-8 или считать ее из файла- то все отлично перекодируется. А вот из XML::RSS НИКАК! ![]() |
Автор: nitr 24.2.2006, 17:07 | ||
|
Автор: rcdimon 24.2.2006, 18:26 |
Этим я уже пользовался. И как раз, когда это мне не помогло, пошел эксперементировать с Text::Iconv |
Автор: nitr 24.2.2006, 18:49 | ||
Вот экспериментируй ![]() |
Автор: rcdimon 24.2.2006, 19:06 |
А что это за штука? При чем тут UTF-16? |
Автор: rcdimon 26.2.2006, 00:37 |
Ужасные траблы с кодировкой именно в консоле! Когда программа запущена из под веба- то с кодировкой все ок! А в консоле начиает глючить! на вставке в базу данных особенно.. совсем не понимаю в чем дело! помогите пожалуйста ![]() ![]() Добавлено @ 00:38 Чем для программы на перл отличается запуск из консоли от запуска через веб? |
Автор: nitr 26.2.2006, 00:45 |
Консоль.... KOI8-R =))) |
Автор: rcdimon 26.2.2006, 09:27 |
Ну во первых не кои8 а cp866 а во вторых мне все равно надо сделать что бы все работало! Я где-то видел какой-то маленький код, который изменяет кодиковку стандартного выходного потока! Можно указать свою! И это действительно работало! Но мне тогда это было не нужно и я потерял куда-то.... Кто нить знает че нить по этой теме? Добавлено @ 09:31 В реальных условиях программа будет работать под Unix. Сейчас же для разработки я использую винду и денвер. |
Автор: nitr 26.2.2006, 22:07 |
чего? у тебя не *nix сервер? Для меня это странно ;) Да и даже под виндой cp866, думаю глупо... А свой выходной поток просто в файл перенапрявь, вот и решение проблем!!! А так глупо... в консоле результат глядеть ![]() |
Автор: rcdimon 26.2.2006, 22:13 | ||
Да я не в консоле его гляжу! Я получаю данные, которые мне передает XML::RSS, перекодирую их из utf-8 в cp1251 и записываю в базу данных! И в базе такая мура! Если в эту же базу пистаь через Perl программу, которая работает через веб- то все ок.
В нормальных условиях программа будет работать под *nix, но при разработке я использую денвер! |
Автор: nitr 26.2.2006, 22:35 |
Значит проверь БД... больше никто думаю нового не придумает, просто ещё добавять пяток новых способов, которые конкретно тебе, не ПОМОГУТ. На форуме поиск хороший, ищи всё что с кодировками БД, тем более недавно об этом говорилось... Читай внимательно! BlackLFL он отвечал на эти вопросы... |
Автор: korob2001 26.2.2006, 22:39 | ||
так можешь перегнать cp1251 в cp866:
![]() Для того, что бы проверить это, достаточно попробовать сохранить данные полученные из RSS в текстовый файл. Если там не увидешь абракадабры, то меняй кодировку БД. |
Автор: nitr 26.2.2006, 22:48 |
Вот верно ![]() ![]() Добавлено @ 22:50 О!, а можно из cp1251 ещё раз в cp1251 кодировать? ![]() |
Автор: korob2001 26.2.2006, 22:57 | ||
Угу ![]()
|
Автор: nitr 26.2.2006, 23:02 | ||
=) а что делает вот этот код? а обратно в utf? Добавлено @ 23:02 для чего используют
|
Автор: rcdimon 27.2.2006, 06:54 | ||
самое интересное вот в чем... Что если подготовить SQL запрос в переменной, а потом записать его в файл, а потом считать из того же файла и отправить базе- то все ОК.
|