Основные возможности:

  • Кодирует строку в koi8-r, cp1251, utf-8;
  • Раскодирует строку из koi8-r, cp1251, utf-8;
  • При кодировании позволяет выбрать учет регистра;
  • Кодирует в удобный вид для написания правил SpamAssassin.

Скриншоты:

Пример кодировки строки

Пример кодировки строки

Учет регистра

Учет регистра

Выбор кодировки

Выбор кодировки

Пример раскодировки строки

Пример раскодировки строки

Пример макроса в формате OpenOffice.org BASIC для кодировки-раскодировки и сам кодировщик-раскодировщик в формате ODS

(Скачать кодировщик-раскодировщик в формате ODS. ЗЫ Не тыкать! Жать правой кнопкой: сохранить ссылку как...)

Описание

Процесс кодировки-раскодировки:

  1. Ввести текстовую строку для кодирования или раскодирования (для раскодирования коды можно вводить в виде \xAB или 0xAB) в ячейку A9 (после ввода выйти из ячейки, напр. нажав Enter) на листе Конвертировать или Реконвертировать соответственно;
  2. Нажать на кнопку Конвертировать или Реконвертировать соответственно;
  3. Результат будет выведен в ячейку A10.

База кодов расположена на листе База.

Пример макроса в формате OpenOffice.org BASIC:

Разработка проводилась в OpenOffice.org 3.0.0 в редакции Novell для openSUSE
Протестировано в: OpenOffice.org 3.1.1

REM  *****  BASIC  *****
 
Sub Convert
    Dim Doc As Object
    Dim Sheet As Object
    Dim Cell As Object
    Dim CellIn As Object
    Dim CellOut As Object
    Dim CellOutVar As Object
    Dim CellConv As Object
    Dim MyLen As Integer
    Dim MyString As String
    Dim MyChar As String
    Dim CellOutPosX As Integer
    Dim CellOutPosY As Integer
    Dim CellOutString As String
    Dim CellCharset As Object
    Dim CellRegistr As Object
    Dim Charset As String
    Dim Registr As String
 
    Doc = StarDesktop.CurrentComponent
    Sheet = Doc.Sheets(1)
    Cell = Sheet.getCellByPosition(0, 8)
    CellCharset = Sheet.getCellByPosition(0, 7)
    CellRegistr = Sheet.getCellByPosition(0, 6)
    Charset = CellCharset.String
    Registr = CellRegistr.String
    MyLen = Len(Cell.String)
 
    Select Case Charset
    Case "koi8-r":
        CellOutPosX = 8
    Case "cp1251":
        CellOutPosX = 5
    Case "utf-8":
        CellOutPosX = 3
    Case Else:
        CellOutPosX = 2
    End Select
 
    CellIn = Sheet.getCellByPosition(2, 5)
    For A = 1  To MyLen
        MyChar = Mid(Cell.String, A, 1)
        CellIn.String = MyChar
        Select Case Registr
        Case "Нет":
            CellOutVar = Sheet.getCellByPosition(11, 1)
            If CellOutVar.String = "#ЗНАЧЕН!!" Then
                CellOutString = "("
            Else
                CellOutString = "(" + CellOutVar.String
            End If
            For CellOutPosY = 1 To 2
                CellOut = Sheet.getCellByPosition(CellOutPosX, CellOutPosY)
                If CellOut.String = "#ЗНАЧЕН!!" Then
                    If CellOutPosY < 2 Then
                        CellOutString = CellOutString + "."
                    Else
                        CellOutString = CellOutString + ")"
                    End If
                Else
                    If CellOutPosY < 2 Then
                        CellOutString = CellOutString + CellOut.String
                    Else
                        CellOutString = CellOutString + "|" + CellOut.String + ")"
                    End If
                End If
            Next
        Case Else:
            If UCase(MyChar) = MyChar Then
                CellOutPosY = 1
            Else
                CellOutPosY = 2
            End If
            CellOut = Sheet.getCellByPosition(CellOutPosX, CellOutPosY)
            CellOutString = CellOut.String
        End Select
        MyString = MyString + CellOutString
    Next
    CellConv = Sheet.getCellByPosition(0, 9)
    CellConv.String = MyString
End Sub
 
Sub ReConvert
    Dim Doc As Object
    Dim Sheet As Object
    Dim Cell As Object
    Dim CellCharset As Object
    Dim Charset As String
    Dim MyLen As Integer
    Dim CellInPosX As Integer
    Dim CellInHex As Object
    Dim CellInChar As Object
    Dim CellOut As Object
    Dim CellOutPosY As Integer
    Dim A As Integer
    Dim NextA As Integer
    Dim MyChar As String
    Dim MyCharPosX As Integer
    Dim MyCharLenX As Integer
    Dim MyCharDelim As String
    Dim CellOutString As String
    Dim MyString As String
    Dim CellConv As Object
 
    Doc = StarDesktop.CurrentComponent
    Sheet = Doc.Sheets(2)
    Cell = Sheet.getCellByPosition(0, 8)
    CellCharset = Sheet.getCellByPosition(0, 7)
    Charset = CellCharset.String
    MyLen = Len(Cell.String)
 
    Select Case Charset
    Case "koi8-r":
        CellInPosX = 8
    Case "cp1251":
        CellInPosX = 5
    Case "utf-8":
        CellInPosX = 3
    Case Else:
        CellInPosX = 2
    End Select
    CellInHex = Sheet.getCellByPosition(CellInPosX, 5)
    CellInChar = Sheet.getCellByPosition(2, 5)
    A = 1
    Do While A <= MyLen
        MyChar = Mid(Cell.String, A, 2)
 
        Select Case MyChar
        Case "0x":
            MyChar = Mid(Cell.String, A, 4)
            CellInChar.String = ""
            CellInHex.String = MyChar
            CellOutPosY = 1
            MyCharPosX = A + 4
            MyCharLenX = 4
            MyCharDelim = ""
            NextA = 4
        Case "\x":
            MyChar = "0" + Mid(Cell.String, A+1, 3)
            CellInChar.String = ""
            CellInHex.String = MyChar
            CellOutPosY = 1
            MyCharPosX = A + 5
            MyCharLenX = 3
            MyCharDelim = "0"
            NextA = 4
        Case Else:
            MyChar = Mid(Cell.String, A, 1)
            CellInChar.String = MyChar
            CellInHex.String = ""
            If UCase(MyChar) = MyChar Then
                CellOutPosY = 1
            Else
                CellOutPosY = 2
            End If
            NextA = 1
        End Select
 
        CellOut = Sheet.getCellByPosition(2, CellOutPosY)
        If CellOut.String = "#ЗНАЧЕН!!" And CellOutPosY = 1 Then
            CellOutPosY = 2
            CellOut = Sheet.getCellByPosition(2, CellOutPosY)
            If CellOut.String = "#ЗНАЧЕН!!" And Charset = "utf-8" Then
                MyChar = MyChar + MyCharDelim + Mid(Cell.String, MyCharPosX, MyCharLenX)
                CellInChar.String = ""
                CellInHex.String = MyChar
                CellOutPosY = 1
                CellOut = Sheet.getCellByPosition(2, CellOutPosY)
                If CellOut.String = "#ЗНАЧЕН!!" Then
                    CellOutPosY = 2
                    CellOut = Sheet.getCellByPosition(2, CellOutPosY)
                    If CellOut.String <> "#ЗНАЧЕН!!" Then
                        A = A + NextA
                    End If
                Else
                    A = A + NextA
                End If
            End If
        End If
        A = A + NextA
        CellOutString = CellOut.String
        MyString = MyString + CellOutString
    Loop
    CellConv = Sheet.getCellByPosition(0, 9)
    CellConv.String = MyString
    CellInHex.String = ""
End Sub
 

Что нового в этой версии:

Версия 1.1 (Срд Дек 16 2009):
- Исправлен баг с раскодировкой кирилицы из utf-8.
Версия 1.0 (Втр Сен 01 2009):
- Первый релиз.