???
Математика на уровне МГУ

Показано с 1 по 8 из 8

Тема: кодирование\раскодирование Unicod в файлах _ru.property

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #8
    пилот РККА Аватар для RusIvan
    Регистрация
    29.11.2004
    Возраст
    59
    Сообщений
    707

    Re: кодирование\раскодирование Unicod в файлах _ru.property

    Mr_N спасибо. Жаль что я уже успел написать код. Но все равно спасибо. На будущее пригодиться

    Проблемма оказалась не сложной
    \u043D это русская буква "н"
    \u - значит уникод 04 - номер кодовой страницы 3D - текстовое написание шестнатеричного кода символа, он больше ASC() кода на 176.
    поэтому формула по переводу единичного символа будет выглядеть так
    txtTmp=Right("\u043D",2) 'вычленяем "3D"
    txtOut=Chr(Val("&H" & txtTmp) + 176) ' получим "н"

    а обратная трансляция так
    txtIn="н"
    txtOut = "\u04" & Hex(Asc(txtIn) - 176)

    ньюансы:
    символы "Ё" и "ё" кодируются вне этого правила.
    \n - кодирует перевод строки
    А вот две функции прямая и обратная для перевода целых текстовых блоков из формата Иловских брифингов и обратно
    Public Function TransLineFrom(txtIn As String) As String
    Dim C As String
    Dim i As Integer
    Dim V As Integer
    Dim txtTmp As String
    i = 1
    Do Until i > Len(txtIn)
    C = Mid(txtIn, i, 1): i = i + 1
    If C = "\" Then
    C = Mid(txtIn, i, 1): i = i + 1
    Select Case C
    Case "n"
    txtTmp = Chr(13) & Chr(10)
    Case "\"
    txtTmp = " "
    Case "u"
    txtTmp = Mid(txtIn, i + 2, 2): i = i + 4
    V = Val("&H" & txtTmp) + 176
    Select Case V
    Case 177
    txtTmp = "Ё"
    Case 257
    txtTmp = "ё"
    Case 192 To 255
    txtTmp = Chr(Val("&H" & txtTmp) + 176)
    Case Else
    txtTmp = "!"
    End Select
    End Select
    Else
    txtTmp = C
    End If
    TransLineFrom = TransLineFrom & txtTmp
    Loop
    End Function



    Public Function TransLineTo(txtIn As String) As String
    Dim C As String
    Dim i As Integer
    Dim txtTmp As String
    For i = 1 To Len(txtIn)
    C = Mid(txtIn, i, 1)
    If Asc(C) < 192 Then
    Select Case Asc(C)
    Case 13
    txtTmp = "\n": i = i + 1
    Case 168
    txtTmp = "\u0401"
    Case 184
    txtTmp = "\u0451"
    Case Else
    txtTmp = C
    End Select
    Else
    txtTmp = "\u04" & Hex(Asc(C) - 176)
    End If
    TransLineTo = TransLineTo & txtTmp
    Next i
    End Function
    Крайний раз редактировалось RusIvan; 17.03.2008 в 10:51.
    Мне бы еще фанеры. Построил бы ероплан, и улетел отседа к едреней фене....

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •