Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> system + utf8, Не корректно отображается UTF8 
V
    Опции темы
migaro
Дата 17.9.2012, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 4.2.2010

Репутация: нет
Всего: нет



Ситуация такая. Работает zimbra на системе:

Код

# uname -a
Linux mx10 2.6.32-41-server #88-Ubuntu SMP Thu Mar 29 14:32:47 UTC 2012 x86_64 GNU/Linux

# cat /etc/*release*
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04.4 LTS"


Я взялся писать скриптик, который будет людям обновлять подписи в 00:00, что бы они их случайно не портили.. ^____^
Собрал все подписи с zimbra и разкидал по файликам. Написал скрипт который их восстанавливает и все вроде хорошо.
Делаю проверочный вывод:

Код

print "zmprov msig $user $id $type $sig\n";


И вижу как будет выглядеть команда модификации подписи и тут все отображается хорошо.. Но! когда я это дело кидаю в zmprov:

Код

system "zmprov", "msig", "$user", "$id", "$type", "\'$sig\'";


То подпись на русском отображаеться "краказябрами".. А вернее ромбики со знаками вопросиков. Проверил локаль:

Код

locale
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C


Оказалось что локаль не та.. Менял локаль на ru_RU.UTF-8, en_US.UTF-8.. :

Код

$ LC_ALL=ru_RU.utf8;LANG=ru_RU.utf8
$ export LC_ALL; export LANG


Краказябры меняют вид. Но отображается не корректно..
Скрипт пишу в UTF-8:

Код

use strict;
use warnings;
use utf8;
binmode (STDOUT, ":utf8");


Файлы открываю:

Код

open FILE, "<:encoding(UTF-8)", "$_" or die "Can't open file: $!\n";
open FILE, ">:encoding(UTF-8)", "./$dir/$filename" or die "Can't open file ./$dir/$filename: $!\n";


Но все равно не распознает ничего.. Если вывожу в консоль то все хорошо даже с ацки локалью.. Но в zmprov работает не так как надо.
С локалью ацки в утилите zmprov не писались русские буквы - вместо них выводились "?".. 
Сменил на UTF-8 - и в zmprov стали писаться русские быквы.. Но если вывод со скрипта, то UTF-8 почему-то корявый:

Код

# name v.g***ky@****.ua
zimbraPrefMailSignatureHTML: 'З повагою, <br><br><br>Гачковський Володимир <br>
Системный Администратор <br>IDS Aqua Service <br>
Україна, Київ, вул. Фрунзе 160А <br>+380 (63) 447-37-26<br>
<a href="mailto:v.ga****y@******ce.com">v.ga****ky@*****ce.com</a><div><a href="http://www.***ce.com">www.***e.com</a></div><br> 


Мыло и домен затер специально.. Помогите, пожалуйста.. Может я не один такой..  smile 

Это сообщение отредактировал(а) migaro - 17.9.2012, 13:25
PM MAIL   Вверх
afiskon
Дата 17.9.2012, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 31.3.2011
Где: Россия, Москва

Репутация: нет
Всего: 4



1. Так у вас скрипт наверное по крону запускается и $LANG там не проставлен
2. Самое правильное решение - пользоваться Encode::encode и Encode::decode
PM MAIL WWW   Вверх
migaro
Дата 17.9.2012, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 4.2.2010

Репутация: нет
Всего: нет



Цитата(afiskon @  17.9.2012,  22:52 Найти цитируемый пост)
1. Так у вас скрипт наверное по крону запускается и $LANG там не проставлен

Пока еще не в кроне. Пока он не дает желаемого результата и я его пускаю руками..  smile 

Цитата(afiskon @  17.9.2012,  22:52 Найти цитируемый пост)
2. Самое правильное решение - пользоваться Encode::encode и Encode::decode

То есть, не использовать encoding при открытии файлов и не use utf8, а явно указывать какие переменные энкодить?

Я с проблемами кодировок столкнулся первый раз.. Прочел статью http://habrahabr.ru/post/53578/ .. но все равно пока еще смутно все ясно..

Это сообщение отредактировал(а) migaro - 17.9.2012, 23:01
PM MAIL   Вверх
alezzz
Дата 18.9.2012, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: нет
Всего: 14



Цитата(migaro @  17.9.2012,  23:01 Найти цитируемый пост)
То есть, не использовать encoding при открытии файлов и не use utf8,

encoding при открытии файла должно было помочь, а use utf8 -- это для утф в самом исходном коде. Попробуйте 
Код

use Encode;

Encode::_utf8_on($sig);

PM MAIL   Вверх
migaro
Дата 18.9.2012, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 4.2.2010

Репутация: нет
Всего: нет



Всем спасибо!

Помогла строка перед выводом:

Код

$sig = decode("utf8", $sig);
system "zmprov", "msig", "$user", "$id", "$type", "$sig";


Это сообщение отредактировал(а) migaro - 19.9.2012, 18:52
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1367 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.