| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > UC/LC and UTF-8 |
| Автор: mastercz 11.1.2010, 08:24 |
| подскажите пожалуйста, как в UTF-8 консоли заставить работать uc()/lc() ? заранее благодарю за ответ. |
| Автор: krypt3r 11.1.2010, 09:14 | ||||
Если будет появляться ошибка Wide character in print..., то добавьте, например, строку
|
| Автор: mastercz 11.1.2010, 09:51 | ||||||||
krypt3r а нельзя как нибудь без
я, к сожалению не понимаю, зачем она здесь, на как-то костыль напоминает. Возможно я ошибаюсь ? Возможно есть другие функции заменяющие uc/lc для UTF-8... P.S >Да кстати, perl 5.8.8, UTF-8 local |
| Автор: krypt3r 11.1.2010, 10:07 | ||
|
| Автор: Pfailed 11.1.2010, 10:46 | ||
Еще как вариант
Тогда патчить stdout не нужно. |
| Автор: mastercz 22.1.2010, 08:31 | ||
| что-то не догоняю. подскажите пожалуйста, как быть быть с входными данными. Флаг UTF8 из аргументов не ставиться, как правильно заставить заставить считать перл, что к нему пришли на входе данные в UTF8. Заранее благодарен за помощь. Вот тестовый пример..
|
| Автор: krypt3r 22.1.2010, 09:02 | ||
Если данные в базе в UTF-8, то попробуйте после коннекта провести запрос
|
| Автор: Pfailed 22.1.2010, 10:18 | ||
Или такой вариант:
|
| Автор: mastercz 22.1.2010, 12:52 |
Ту дело не в Базе Данных, строки к ней можно закомментировать. Проблема в том что, строка берущаяся в качестве аргумента без флага UTF8. В реальной задаче данные которые я подаю на вход WEB - скрипта, превращаются в не читаемую хрень еще до записи в базу. Думаю это не важно, но на всякий случай в реальной задаче это Apache2+ mod_perl2 + mason 1.39 + perl 5.10 |
| Автор: krypt3r 22.1.2010, 13:57 | ||||
Эм, а это у вас что?
Наверно, предполагалось что-то типа
|
| Автор: mastercz 22.1.2010, 15:40 | ||
|
| Автор: Pfailed 22.1.2010, 19:19 | ||||
С точки зрения перла не аналогична. Первое - это срез массива, а второе элемент массива. use warnings об этом намекает. |
| Автор: mastercz 25.1.2010, 02:04 | ||
| Выходные кончились, возвращаюсь к задаче. Чувствую себя полным бараном но пока не вижу решения даннаой проблемы :( Неужели ни у кого не работает Web-Perl скрипт полностью под UTF-8. Мне кажется задачка весьма тривиальна просто я чего-то не догоняю. Поделитесь пожалуйста опытом, как вы заставляете интерпретатор, понимать что из веб-морды пришли данные в UTF-8. Я предполагаю, если я усилием воли подниму флаг на переменную, то проблема исчезнет. Вот только, _utf8_on($arg); внутренняя функция, а как это сделать корректно, я не знаю. И еще, прагма use open qw /:std :utf8/; должна ИМХО работать и над STDIN и на STDOUT почему же в приведенном выше примере аргумент из командной строки не воспринимается как UTF-8. Для наглядности упрощаю вид вышеприведенного примера:
|
| Автор: krypt3r 25.1.2010, 07:55 | ||||
http://www.nestor.minsk.by/sr/2008/09/sr80902.html http://xpoint.ru/know-how/Perl/PodderzhkaUnicode Для юникодизации массива @ARGV запускайте интерпретатор с ключом -CA
Added: Так как этот ключ не работает в самом скрипте, то можно в BEGIN {...} прописать насильную установку utf8-флага для @ARGV - по дефолту у этого массива данный флаг отключен |
| Автор: mastercz 26.1.2010, 02:15 | ||||||||||
| krypt3r, спасибо за помощь. Web-скрипт вроде как отчасти заработал. Я использовал следующую настройку под html-mason
Плюс в настройках Apache2
Однако почему то DBI а именно $dbh->errstr выдает некорректный текст несмотря на
Получаю что-то вида
Хотя обычный поток данных от DBI идет как нужно. Да и еще, не врубаюсь почему вместо приведенной надстройки не работает прагма
|
| Автор: krypt3r 26.1.2010, 06:47 | ||||||
А вы уверены, что данные в базе именно в UTF8? Что показывает запрос
? Делаете ли в скрипте set client_encoding? Приведу пример. Кластер PostgreSQL собран с кодировкой WIN1251. Есть скрипт, запускаемый локально на серваке. Локаль консоли - ru_RU.UTF-8.
Вывод скрипта
Так что если все сделано правильно, на выводе будет все красиво) |
| Автор: mastercz 28.1.2010, 09:52 | ||||||
krypt3r, я наверно неопределенно выразился ... вот пример, что я имел в виду .
на выходе получаю в следующие
Т. е. ошибка пришедшая от DBI
|
| Автор: krypt3r 28.1.2010, 14:58 | ||
поэкспериментируйте со значением. |
| Автор: mastercz 29.1.2010, 03:01 |
| кажется нашел, проблема в модуле DBВ::Pg (2.8.7-1) от в сборке от debian lenny поставил из CPAN текущую версию и ... о чудо ... проблема исчезла, вот только не хороше это когда не из коробки :( krypt3r, еще раз спасибо за помощь. P.S. Тему пока не закрываю. Закрою после окончательного тестинга скрипта, ежели ничего больше не всплывет. |