Декодирование UTF-8 с помощью VBScript

Категория: Веб-программирование| Полезные заметки

9 Авг 2013

В один прекрасный момент мне потребовалось написать конвертатор записей, представленных в виде структурированного текстового файла, в таблицы базы данных Microsoft SQL Server с помощью скрипта на VBScript.

Все бы ничего, да кодировка исходного файла была UTF-8, в связи с чем мой скрипт никак не мог правильно прочитать структуру данных, в которой использовались словари для хранения данных. Проблема возникала из-за не правильного чтения данных по словарю, так как возникала проблема с чтением блока данных определенной длины, взятой из словаря. Всему виной была кодировка UTF-8. К сожалению VBScript по умолчанию не умеет работать с UTF-8.

Таким образом, необходимо было декодировать блок данных из UTF-8 в Unicode. Для этих целей можно использовать данную функцию на VBScript:

Function DecodeUTF8(s)
    Dim i, c, n, b1, b2, b3
    i = 1
    Do While i <= len(s)
        c = asc(mid(s,i,1))
        If (c and &hC0) = &hC0 Then
            n = 1
            Do While i + n <= len(s)
                If (asc(mid(s,i+n,1)) and &hC0) <> &h80 Then
                    Exit Do
                End If
                n = n + 1
            Loop
            If n = 2 and ((c and &hE0) = &hC0) Then
                b1 = asc(mid(s,i+1,1)) and &h3F
                b2 = c and &h1F
                c = b1 + b2 * &h40
            Elseif n = 3 and ((c and &hF0) = &hE0) Then
                b1 = asc(mid(s,i+2,1)) and &h3F
                b2 = asc(mid(s,i+1,1)) and &h3F
                b3 = c and &h0F
                c = b3 * &H1000 + b2 * &H40 + b1
            Else
                ' Символ больше U+FFFF или неправильная последовательность
                c = &hFFFD
            End if
            s = left(s,i-1) + chrw( c) + mid(s,i+n)
        Elseif (c and &hC0) = &h80 then
            ' Неожидаемый продолжающий байт
            s = left(s,i-1) + chrw(&hFFFD) + mid(s,i+1)
        End If
        i = i + 1
    Loop
    DecodeUTF8 = s
End Function

Я не являюсь автором кода, и в случае, если Вам понадобится не декодировать, а наоборот кодировать данные в UTF-8, то Вы можете найти соответствующую функцию на хабрахабре, где автор подробно описал функции кодирования и декодирования UTF-8 с помощью VBScript. Надеюсь представленная информация поможет в решении Вашей проблемы!

Кстати, очень интересно:

Опубликовать в twitter.com Опубликовать в своем блоге livejournal.com Поделится ссылкой на yandex.ru

Написать комментарий

Вы должны Войти, чтобы оставить комментарий.

О блоге

Данный блог создан с целью помочь, как начинающему вебмастеру, так и опытному разработчику, в решении проблем возникающих при разработке сайтов. Здесь Вы прочитаете полезные статьи о том, как грамотно произвести SEO оптимизацию своего сайта, и найдёте важные исследования в сфере интернет-маркетинга. Научитесь писать собственные компоненты и модули для известных CMS, а также узнаете интересные методы работы с Фреймворками, CSS, HTML, jQuery и PHP. Из записей блога вы поймёте как грамотно разрабатывать макеты сайтов и что такое валидная вёрстка. БЛОГZOR – поможет Вам стать web-Гуру и понять тонкости веб-мастеринга.

Последние комментарии

  • Амир: форма появилась на сайте, но письмо не приходит на [...]
  • Ян: Все нравится, единственное, раскрывающийся блок мо [...]
  • СПАСИБО!: Спасибо тебе! Замечательная функция. очень помогла [...]
  • Алексей: Подскажите, а как заставить этот скрипт отработать [...]
  • Дмитрий: Заработало, надо было малость поменять путь в conf [...]

Можно Скачать