Конвертация текста UTF-16 в ANSI

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8016
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

Конвертация текста UTF-16 в ANSI

Сообщение Игорь Столяров »

Привет всем !

Есть некий файл в кодировке UTF-16. Его нужно перегнать в обычный ANSI. Загрузил файл в строку, пробую конвертировать.
Попробовал через MultiByteToWideChar() & WideCharToMultiByte(), как UTF-8 в ANSI и вообще ничего не получилось .... :(

Есть ли у кого нибудь пример или хотя бы идея как вообще такое преобразование выполнить ?
Заранее спасибо !
Make Clarion Great Again ! 😎
seawolf
Старожил
Сообщения: 217
Зарегистрирован: 08 Июль 2005, 11:23
Откуда: St. Petersburg

Re: Конвертация текста UTF-16 в ANSI

Сообщение seawolf »

Было чего-то такое надо поискать. Читал utf16 файл как ascii там через позицию идет комбинация символов которые просто надо вырезать
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8016
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

Re: Конвертация текста UTF-16 в ANSI

Сообщение Игорь Столяров »

Да, сапсибо, уже разобрался. :)
Make Clarion Great Again ! 😎
PIT
Посетитель
Сообщения: 49
Зарегистрирован: 18 Август 2005, 10:16
Откуда: Пермь
Контактная информация:

Re: Конвертация текста UTF-16 в ANSI

Сообщение PIT »

Может кому пригодится.

Код: Выделить всё

utf2txt              PROCEDURE  (st_in)                    ! Declare Procedure
d1    SHORT
d2    SHORT
c     SHORT
t     cstring(max_buffer)                    
len_str LONG

  CODE
   clear(t)
   j#=0
   len_str = len(clip(st_in))
   loop i#=1 to len_str   
      d1 = val(st_in[i#]) 
      IF d1 <= 127
         t = t & chr(d1)
      ELSE
         d2 = val(st_in[i#+1])
         CASE d1
         OF 208
            case d2
            OF 129
               c = 168
            of 78
               c = 185
            else
               c = d2 + 48
            .
            t = t & chr(c)
         OF 209
            case d2
            of 209
               c = 184
            else
               c = d2 + 112
            .
            t = t & chr(c)
         END
         i# += 1
      END
   END 
   return t
С уважением, П.Ялунин (PIT)
Ответить