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

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

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

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

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

    Может уже есть, но все пролистал, не нашел.
    Есть необходимость написания кода в VB для автоматического создания файлов _ru.properties (брифингов). Но видно мои познания недостаточны. Никак не могу перевести текст вида
    \u0422\u0438\u043F: \u041F\u0430\u0442\u0440\u0443\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435\n\n\u0414\u0430\u0442\u0430: 01 \u0418\u044E\u043B\u044F 1941\n\n\u0412\u0440\u0435\u043C\u044F: 9:40\n\n\u041F\u043E\u0433\u043E\u0434\u0430: \u042F
    в нормальный, и обратно средствами Визуал бейсик. Может кто то сталкивался с этим, и ужи имеет либо код, либо даст полезный совет.
    Заранее спасибо
    Мне бы еще фанеры. Построил бы ероплан, и улетел отседа к едреней фене....

  2. #2
    списанный с флота Аватар для Schalker
    Регистрация
    05.06.2006
    Адрес
    Germany
    Возраст
    60
    Сообщений
    360
    Записей в дневнике
    3
    Images
    1

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

    я пользуюсь для этого прогой Shtirlitz IV
    ------
    Shtirlitz IV 4.01 - Одна из лучших программ для исправления писем, искореженных при пересылке, и вообще любых нечитаемых текстов. Хотел было написать лучшая, но потом спохватился: что же, я тогда, выходит, использую не лучшую? (а использую я при необходимости MailReader). Несмотря на то, что не повернулся у меня язык назвать Штирлица лучшей программой, из бесплатных он, на мой взгляд, действительно лучший (вообще-то программа является "adware", но в данном случае это не столь важно). Цитирую автора:
    Программа Штирлиц расшифровывает русские тексты, написанные в различных русских кодировках (Win-1251, KOI-8r, DOS, ISO-8859-5, MAC и др.), в транслитерации, в форматах Quoted Printable, UTF-7, UTF-8, RTF, HTML, закодированные с помощью uuencode, xxencode, base64, binhex, BtoA тексты и файлы, а также тексты, подвергнувшиеся смешанному перекодированию и, в частности, имеющих фрагменты в различных кодировках. Штирлиц способен привести такие тексты к кодировке Windows (1251) для их прочтения и для дальнейшей работы с ними (сохранение, печать, исправления и пр.), а также произвести обратные преобразования. Кодировки и схемы транслитерации можно добавлять и корректировать. Механизм распознавания кодировки может запускаться автоматически при вставке текста из буфера обмена и при загрузке файла. Интерфейс - русский, английский, болгарский.
    ------
    http://soft.softodrom.ru/ap/p336.shtml
    -------
    с ее помощью собрал тексты из Курсанта в один файл.
    советую.

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

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

    спасибо. Со Штирлицем имел дело. Но это отдельная программа предполагающая ручную загрузку и прочее. А мне нужен код для автогенератора. Кстати какой то глюк у меня и со Штирлицем. Толи версию другую поставил, то ли что то с кодировками Винды не то. В прошлый раз когда ставил все было ок, а теперь он не транслирует файлы брифингов...
    Мне бы еще фанеры. Построил бы ероплан, и улетел отседа к едреней фене....

  4. #4
    Пилот Аватар для FilMit
    Регистрация
    25.03.2007
    Адрес
    Ростов-на-Дону
    Сообщений
    304

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

    Цитата Сообщение от RusIvan Посмотреть сообщение
    Может уже есть, но все пролистал, не нашел.
    Есть необходимость написания кода в VB для автоматического создания файлов _ru.properties (брифингов). Но видно мои познания недостаточны. Никак не могу перевести текст вида
    \u0422\u0438\u043F: \u041F\u0430\u0442\u0440\u0443\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435\n\n\u0414\u0430\u0442\u0430: 01 \u0418\u044E\u043B\u044F 1941\n\n\u0412\u0440\u0435\u043C\u044F: 9:40\n\n\u041F\u043E\u0433\u043E\u0434\u0430: \u042F
    в нормальный, и обратно средствами Визуал бейсик. Может кто то сталкивался с этим, и ужи имеет либо код, либо даст полезный совет.
    Заранее спасибо
    Может я не понял суть вопроса, но вот что сие означает "Тип: Патрулирование

    Дата: 01 Июля 1941

    Время: 9:40

    Погода: Я". Прочёл программкой il2_ru[1.41] http://www.sukhoi.ru/forum/showpost....7&postcount=57 от LSA.
    Обращайся с самолётом как с любимой девушкой... Забирайся в него по пять раз в день, возноси в небеса и приводи обратно на землю...

  5. #5
    Зашедший
    Регистрация
    06.04.2004
    Адрес
    Екатеринбург
    Возраст
    47
    Сообщений
    37

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

    имеются WinAPI функции WideCharToMultiByte и MultiByteToWideChar - они именно это и делают
    - но вот как ими воспользоваться в басике - я, к сожалению, не имею представления - но это точно возможно
    Крайний раз редактировалось mr N; 13.03.2008 в 17:31.

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

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

    спасибо. Попробую поискать. Правда уже склонясь к тому чтоб тупо сделать таблицу подстановки))
    Ab

    FilMit тоже спасибо за перевод. Но текст я знаю) Сам набирал в полном редакторе)
    Мне бы еще фанеры. Построил бы ероплан, и улетел отседа к едреней фене....

  7. #7
    Зашедший
    Регистрация
    06.04.2004
    Адрес
    Екатеринбург
    Возраст
    47
    Сообщений
    37

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

    мне тут подсказали, что в басике (если это MS Visual Basic) надо их просто задекларировать - и можно использовать
    (декларация вроде должна быть в одну строку)

    Public Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As String, ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long

    Public Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As String, ByVal cchWideChar As Long) As Long

    а как ф-иями пользоваться - в MSDN вполне доступно расписано
    (в качестве кодировки я тупо указывал число 1251 - и работало)

    и ещё, в 6 студии есть тулза полезная APILOAD.EXE (лежит примерно в <visual_studio_path>\COMMON\Tools\Winapi\APILOAD.EXE) - подготовленные декларации, для использования в басике (только сначала надо в ней открыть файл с декларациями, напр. WIN32API.TXT - лежит рядом с утилитой)
    (есть ли что подобное в более позних студиях - не знаю, но что то подобное наверное должно быть)
    Крайний раз редактировалось mr N; 14.03.2008 в 09:12.

  8. #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.
    Мне бы еще фанеры. Построил бы ероплан, и улетел отседа к едреней фене....

Ваши права

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