![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
gcc |
|
||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
есть переменная, русские буквы $_
я хочу добавить, но кодировка портиться
получается
смотрел модуль UTF8 но не понял каким методов воспользоватся... encode decode не реагируют http://perldoc.perl.org/utf8.html каким методов воспользоватся? Это сообщение отредактировал(а) gcc - 25.9.2009, 22:31 |
||||
|
|||||
ginnie |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
gcc,
и выведи содержимое переменной $_ при помощи
до и после конкатенации. Это сообщение отредактировал(а) ginnie - 25.9.2009, 21:49 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||
|
|||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
ginnie,
а что должно быть? ничего не получилось вродебы Data::Dumper вывел:
|
|||
|
||||
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
||||
|
||||
gcc |
|
||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
Это сообщение отредактировал(а) gcc - 26.9.2009, 00:37 |
||||
|
|||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
увидел, вот в отладке, кажется
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
gcc, я ожидал увидеть два блока, а у Вас их гораздо больше, это что?
Сделай так: выведи значение $_, затем Dump($_); затем выполни конкатенацию, выведи значение $_ и Dump($_). Затем exit() ![]() Добавлено через 3 минуты и 22 секунды P.S. А вообще-то, похоже, что ты строковое значение в $_ обрезаешь и добавляешь '.. ' Только судя по логу иногда у тебя обрезание делается посередине символа (т.к. символ двухбайтный): "\320\274\320\270\321\202\320\276\321\201-\320\274\320\270\321.. " (321 - это первый байт символа). Добавлено через 7 минут и 40 секунд P.P.S. Тебе, вероятно, надо до обрезания превратить байтовую последовательность в unicode-строку. Попробуй
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
gcc |
|
||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
да, вот
я обрезал вот так вот:
разве это не правильно? Это сообщение отредактировал(а) gcc - 26.9.2009, 02:13 |
||||
|
|||||
gcc |
|
||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
спасибо, посмотрю
сейчас мне catalyst ругается на:
use utf8; пишет что таких методов Encode::decode нету Это сообщение отредактировал(а) gcc - 26.9.2009, 02:13 |
||||
|
|||||
ginnie |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
gcc, с "Wide character in syswrite" может помочь
хотя я не уверен, что это красивый вариант. По-идее должен быть другой, более правильный.
Зачем пересказывать сообщения об ошибках? Так интереснее? Я хочу видеть оригинал! -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||
|
|||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
Catalyst ругается, я вот еще нашел http://jeremy.zawodny.com/blog/archives/010546.html
но не понял что там надо сделать Добавлено через 13 минут и 6 секунд псоле этого binmode(STDOUT,":utf8"); кодировка портиться
в браузере стоит utf8 ладно, я потом еще посмотрю, мне это сейчас очень срочно не адо... |
|||
|
||||
gcc |
|
||||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
|
||||||
|
|||||||
DurRandir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
Длинный путь - perldoc utf8 до просветления) Но оно не скоро наступит)
Строчка FLAGS = (POK,pPOK) говорит о том, что перл интерпретирует внутреннее содержание строки как байты. И работает с ним как с байтами - выводит длину как количество байт и, внимание, строковые операции тоже работают с байтами. Делаем магический пасс - { use Encode; Encode::_utf8_on($_); Dump($_); }, и получаем FLAGS = (POK,pPOK,UTF8). Теперь перл считает, что внутри уже не простые байты, а некие последовательности (даже если их там нет и внутри лежали случайные числа! использовать _utf8_on надо с осторожностью). И эти последовательности могут состоять уже не из одного байта. Вот с такой строкой операция substr уже не будет вставлять данные внутри utf-последовательностей. Надо только помнить, что, соединяя utf-on и utf-off строки, можно получить странный результат. В случае объединения с "..." ничего страшного быть не должно - как эту строчку не интерпретируй, она содержит внутри три байта (символы первой половины ascii-таблицы). Теперь что такое "Wide character in <whatever>". Это происходит, когда строчку с utf-8 флагом передают какой-либо функции, которая умеет работать только с байтами. Поэтому произвели преобразования, больше работать со строкой не надо? Снимите флаг. Encode::_utf8_off($_). |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
DurRandir, есть пара замечаний:
1. perldoc utf8, думаю, не совсем по теме т.к. Do not use this pragma for anything else than telling Perl that your script is written in UTF-8. Читать надо perldoc perlunicode. 2. _utf8_on() начинается с подчеркивания не просто так - эта функция только для внутреннего (внутри модуля) использования. 3. "Wide character in..." появляется, когда в поток (поток вывода или файл) пытаются вывести символы, с кодом более 255. Если явно не указать кодировку интерпретатор пытается интерпретировать все символы в соответствии с ISO-8859-1, а когда это не удается сделать, выдает сообщение "Wide character in...". -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
DurRandir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
>_utf8_on()
Тут от входных данных зависит. Если там точно юникод в utf-8 (т.к. мы его в базу положили), и надо просто сообщить перлу как его трактовать - самый простой способ. А если неизвестные входные данные - там надо Encode::(de|en)code (да ещё и с $check) - если входные данные юникод, но в другой кодировке (как тот же ucs-2 от excel'я), или iconv - если входные данные не юникод вовсе. >"Wide character in..." Да, я не совсем точно выразился. |
|||
|
||||
gcc |
|
||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
сделал:
я вот нашел как это исправить этот дебаг http://wonder.pl/index.php/Catalyst-FormFu...terki?version=1
====== вот еще нашел http://www.catalystframework.org/calendar/2006/21
Это сообщение отредактировал(а) gcc - 3.10.2009, 13:28 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |