Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Нужна помошь по ускорению работы функции:

Код: Выделить весь код
Func __UTF8ToUnicode($Utf8String)
    Local $BufferSize = StringLen($Utf8String) * 2
    Local $Buffer = DllStructCreate("byte[" & $BufferSize & "]")

    DllCall("Kernel32.dll", "int", "MultiByteToWideChar", _
        "int", 65001, _
        "int", 0, _
        "str", $Utf8String, _
        "int", StringLen($Utf8String), _
        "ptr", DllStructGetPtr($Buffer), _
        "int", $BufferSize)

    Local $UnicodeBinary = DllStructGetData($Buffer, 1)
    Local $UnicodeHex1 = StringReplace($UnicodeBinary, "0x", "")
    Local $StrLen = StringLen($UnicodeHex1)
    Local $UnicodeString, $UnicodeHex2, $UnicodeHex3

    For $i = 1 To $StrLen Step 4
        $UnicodeHex2 = StringMid($UnicodeHex1, $i, 4)

        If $UnicodeHex2 = "0000" Then ContinueLoop

        $UnicodeHex3 = StringRegExpReplace($UnicodeHex2, "(..).(.)", "\2\1")
        $UnicodeString &= ChrW(Dec($UnicodeHex3))
    Next

    $Buffer = 0

    Return $UnicodeString
EndFunc
С большими блоками текста довольно медленно отрабатывает, всё дело в цикле, я уже пробовал разные комбинации вместо String*, но ничего значительно не ускорялось.. Или быть можеть есть другой вариант преобразовать UTF-8 в юникод? (UTF-16?)

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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 02:54, 07-04-2008 | #399