ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #261  
Старый 13.08.2009, 09:03
Аватар для login999
login999
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме:
4512757

Репутация: 973


По умолчанию

Цитата:
Сообщение от Gifts  
Есть ли для питона какой-нибудь аналог пхпшной функции mb_detect_encoding? Есть простенький модуль для джабберного бота, который открывает порт и пересылает все принятые на него данные дальше. Соединение может быть откуда угодно (телнет, пхп сокет, и т.д.) Поэтому и кодировок несколько CP866, CP1251, UTF8. Как бы подружить их всех с русским языком?
Нету аналогов Я сам бы много отдал за автоматическое определение кодировки...
__mad, не в теме, это не то что нужно
 
Ответить с цитированием

  #262  
Старый 13.08.2009, 16:49
Аватар для __mad
__mad
Участник форума
Регистрация: 04.11.2007
Сообщений: 103
Провел на форуме:
548128

Репутация: 104
По умолчанию

Цитата:
__mad, не в теме, это не то что нужно
Хм, и почему же это не подходит?

вот например создаем файлы с разными кодировками:

$iconv -f UTF-8 -t 866 <(echo Привет) > enc-866
$iconv -f UTF-8 -t WINDOWS-1251 <(echo Привет) > enc-windows-1251
$echo Привет > enc-utf-8

Теперь запускаем следующий код (использующий эту либу):

Код:
import glob
from chardet.universaldetector import UniversalDetector

detector = UniversalDetector()

for filename in glob.glob('enc-*'):
    print filename.ljust(60),
    detector.reset()
    for line in file(filename, 'rb'):
        detector.feed(line)
        if detector.done: break
    detector.close()
    print detector.result
$ python enc.py
enc-866 {'confidence': 0.98999999999999999, 'encoding': 'IBM866'}
enc-windows-1251 {'confidence': 0.98999999999999999, 'encoding': 'windows-1251'}
enc-utf-8 {'confidence': 0.98999999999999999, 'encoding': 'utf-8'}

Как видно, скрипт (точней либа) правильно определила разные кодировки.
 
Ответить с цитированием

  #263  
Старый 13.08.2009, 17:10
Аватар для login999
login999
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме:
4512757

Репутация: 973


По умолчанию

Не обратил внимания на то что он работает со строками, в таком случае да, но я не доверяю чужим модулям, до тех пор пока они не попадают в стандартную библиотеку.
Доверяю Гвидо на все 100%, такая цацка я думаю была бы востребована, если ее не включили в стандартную поставку(более чем уверен в том, что этот вопрос поднимался), знач чето с ней не то.
Вообще, если разобраться по большому счету, то использование чужих модулей конкретно сказывается на юзерах - первое это зависимости(и неудобство как следствие того), а второе-это кривизна кода самого модуля, упрощение команд бота ИМХО(!) не стоит того, чтобы рисковать и ставить непонятно что, которое неизвестно как будет работать.
Кому как, а я (с) Мы не ищем лёгких путей!

Последний раз редактировалось login999; 13.08.2009 в 17:18..
 
Ответить с цитированием

  #264  
Старый 13.08.2009, 17:56
Аватар для __mad
__mad
Участник форума
Регистрация: 04.11.2007
Сообщений: 103
Провел на форуме:
548128

Репутация: 104
По умолчанию

Цитата:
до тех пор пока они не попадают в стандартную библиотеку.
Сторонние модули будут всегда, в независимости от того хорошо они написаны или криво, из за того что в стандартную библиотеку по простому все не влезет, да и не надо оно там.

Цитата:
Вообще, если разобраться по большому счету, то использование чужих модулей конкретно сказывается на юзерах
Это тоже довольно спорно, юзер может даже и не знать что в программе используется тот или иной не стандартный модуль, по простому я могу распространять свою программу с этими модулями.

Цитата:
а второе-это кривизна кода самого модуля
Я думаю что люди пишущие модули, вполне способны качественно написать код, тем более если они это пишут не только для себя.

Цитата:
которое неизвестно как будет работать.
Вполне известно, например для этой либы в документации есть файлик how-it-works.html где вполне кратко описан алгоритм работы либы (в крайнем случае можно пробежаться по коду).

Цитата:
упрощение команд бота
С этим согласен, бот должен по возможности состоять только из кода входящего в стандартную библиотеку (для минимизации размера, и возможность запуска в различных средах).

Еще как вариант, можно использовать вот такой способ:

Код:
enc_list=['utf-8', 'windows-1251', 'IBM866']

def try_encoding(text):
    for try_enc in enc_list:
        try:
            unicode(text, try_enc, "strict")
        except:
            pass
        else:
            break
    return try_enc
Правда с 866 он не выдает экзепшен, так что для этой кодировки нужно придумать что ни будь другое.
 
Ответить с цитированием

  #265  
Старый 13.08.2009, 19:18
Аватар для Gifts
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме:
2769640

Репутация: 1304


По умолчанию

__mad К сожалению Universal Detector дает много неправильных срабатываний для достаточно коротких строк. Эксепшн в unicode тоже не панацея. Что ж, придется видимо первыми байтами передавать цифровой код, указывающую на кодировку, в случае отсутствия - переводить в хекс, а дальше пусть на той стороне разбираются
 
Ответить с цитированием

  #266  
Старый 14.08.2009, 09:44
Аватар для login999
login999
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме:
4512757

Репутация: 973


По умолчанию

Цитата:
Сообщение от Gifts  
__mad К сожалению Universal Detector дает много неправильных срабатываний для достаточно коротких строк. Эксепшн в unicode тоже не панацея. Что ж, придется видимо первыми байтами передавать цифровой код, указывающую на кодировку, в случае отсутствия - переводить в хекс, а дальше пусть на той стороне разбираются
Мб лучше делать все через какой-то специализированный клиент, а юзерам давать возможность указывать кодировку?
Просто даже если брать консоль, то в виндовой консоли cp866, а в лине обычно utf8, что уже получается хрен знает что.
 
Ответить с цитированием

  #267  
Старый 14.08.2009, 09:54
Аватар для login999
login999
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме:
4512757

Репутация: 973


По умолчанию

Цитата:
Сообщение от __mad  
Сторонние модули будут всегда, в независимости от того хорошо они написаны или криво, из за того что в стандартную библиотеку по простому все не влезет, да и не надо оно там.



Это тоже довольно спорно, юзер может даже и не знать что в программе используется тот или иной не стандартный модуль, по простому я могу распространять свою программу с этими модулями.



Я думаю что люди пишущие модули, вполне способны качественно написать код, тем более если они это пишут не только для себя.



Вполне известно, например для этой либы в документации есть файлик how-it-works.html где вполне кратко описан алгоритм работы либы (в крайнем случае можно пробежаться по коду).



С этим согласен, бот должен по возможности состоять только из кода входящего в стандартную библиотеку (для минимизации размера, и возможность запуска в различных средах).

Еще как вариант, можно использовать вот такой способ:

Код:
enc_list=['utf-8', 'windows-1251', 'IBM866']

def try_encoding(text):
    for try_enc in enc_list:
        try:
            unicode(text, try_enc, "strict")
        except:
            pass
        else:
            break
    return try_enc
Правда с 866 он не выдает экзепшен, так что для этой кодировки нужно придумать что ни будь другое.
how it works - нихера не показатель, я могу тоже много чего наворотить и описать как оно типа должно работать.
Насчет стандартной библиотеки- не угадали, если взглянуть на тенденции в развитии питона а также на ареал его обитания, то сразу становится ясным что такая вещь была бы очень востребована (python3.1 -возможность указания кодировки при открытии файла, для внутреннего преображения используется utf8, дабы сие чудо работало так как нужно, то оно уже было бы встроенным во внутренности питона), плюс ареал его обитания -от мобильных устройств до Макоси.
"Люди пищущие модули могут качественно написать код"-далеко не факт, я как и любой другой могу выложить свой код, вот только у меня сомнения в его качестве, уважаемый Gifts в свое время поднимал вопрос по оптимизации xmpp бота на python, ибо жрал он много оперативки, для создания бота использовался xmpppy, что-то мне подсказывает что если бы это было написано им лично, то такой вопрос не ставал бы (имею ввиду модуль для работы с xmpp).
 
Ответить с цитированием

  #268  
Старый 14.08.2009, 15:13
Аватар для __mad
__mad
Участник форума
Регистрация: 04.11.2007
Сообщений: 103
Провел на форуме:
548128

Репутация: 104
По умолчанию

Цитата:
how it works - нихера не показатель, я могу тоже много чего наворотить и описать как оно типа должно работать.
И часто ли ты встречался с таким кодом (модулями) где автор пишет в описание одно, а код совершенно другой, помойму таки это уже попахивает паранойей. Да, и в мире СПО я с таким ни разу не встречался, обычно если есть какие то проблемы с модулем, о них пишут в секции Know Issue (Bugs, и т.п.), а за показатель качества кода говорит, например, комюнити сформировавшееся вокруг него.

Цитата:
то сразу становится ясным что такая вещь была бы очень востребована
(python3.1 -возможность указания кодировки при открытии файла)
Возможность указания, и распознавание кодировки - это разные вещи. Но речь не об этом.
В той мысли я имел ввиду не конкретный модуль, а то что необходимость пользоваться сторонними модулями будет всегда.

Цитата:
уважаемый Gifts в свое время поднимал вопрос по оптимизации xmpp бота на python, ибо жрал он много оперативки
А что ему мешало отрапортовать об проблеме автору бота? Уверен что он бы откликнулся и, возможно, исправил проблему, или же подсказал как это обойти. (В СПО, багрепорты, всегда приветствуются)

Цитата:
что-то мне подсказывает что если бы это было написано им лично, то такой вопрос не ставал бы
Возможно, но так же могли бы и появится другие проблемы, да и думаю что времени было бы потрачено больше, чем на исправления этой проблемы.
 
Ответить с цитированием

  #269  
Старый 14.08.2009, 15:39
Аватар для login999
login999
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме:
4512757

Репутация: 973


По умолчанию

Цитата:
Сообщение от __mad  
И часто ли ты встречался с таким кодом (модулями) где автор пишет в описание одно, а код совершенно другой, помойму таки это уже попахивает паранойей. Да, и в мире СПО я с таким ни разу не встречался, обычно если есть какие то проблемы с модулем, о них пишут в секции Know Issue (Bugs, и т.п.), а за показатель качества кода говорит, например, комюнити сформировавшееся вокруг него.



Возможность указания, и распознавание кодировки - это разные вещи. Но речь не об этом.
В той мысли я имел ввиду не конкретный модуль, а то что необходимость пользоваться сторонними модулями будет всегда.



А что ему мешало отрапортовать об проблеме автору бота? Уверен что он бы откликнулся и, возможно, исправил проблему, или же подсказал как это обойти. (В СПО, багрепорты, всегда приветствуются)



Возможно, но так же могли бы и появится другие проблемы, да и думаю что времени было бы потрачено больше, чем на исправления этой проблемы.
Эхх, это не попахивает, это и есть паранойя и паталогическое недоверие к чужому коду (исключение составляют только действительно серьезные продукты, которые заслужили всеобщее признание и уважение , такие как Джанго, Твистед). Принципиально не использую сторонних модулей и считаю, что стандартной библиотеки питона в повседневной жизни хватает абсолютно с головой, для серьезных же проектов код пишется свой от А до Я (исключения из этого правила смотри выше). Если бы модуль автоматического определения кодировки работал исправно, то он бы давно уже был в стандартной поставке(хотя это может быть и только мое ИМХО). Необходимость использования сторонних модулей (не путать с фреймворками, см выше) стоит только для тех кто не хочет хотя бы на необходимом ему уровне разобраться с тем, чем он собрался оперировать, я же считаю неприемлимым для программиста работать с чем либо, не понимая КАК оно работает. Хотя в принципе я не программист, так что хз как там у кодеров принято...
=============================================
P.S> Забыл добавить - я мудак и ламо

Последний раз редактировалось login999; 14.08.2009 в 15:44..
 
Ответить с цитированием

  #270  
Старый 19.08.2009, 05:05
Аватар для Tombik
Tombik
Banned
Регистрация: 21.12.2008
Сообщений: 413
Провел на форуме:
4991305

Репутация: 352
По умолчанию

Почему не работает?((

Код:
#!/usr/bin/env python 
# Gmail Account Checker   
 
import sys, poplib 
 
def printHelp(): 
    print '\nUsage: ./gmailcheck.py <emaillist>' 
    print 'Example: ./gmailcheck.py emails.txt' 
    print '\nNote: The accounts must be in the following format: user@gmail.com:password\n' 
 
 
print ''' 
\t _____           _ _ 
\t|   __|_____ ___|_| | 
\t|  |  |     | .'| | | 
\t|_____|_|_|_|__,|_|_| 
\t   Account Checker  
''' 
 
if len(sys.argv) != 2: 
    printHelp() 
    exit(1) 
......

Последний раз редактировалось Tombik; 20.08.2009 в 09:05..
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ