Про кодировку

Clarion, Clarion 7

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

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

Про кодировку

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

Привет всем !

Подскажите пожалуйста, как можно перекодировать обычную ASCII строку в UTF-8 ?
Желательно в контексте использования под Clarion (в сети много примеров для PHP - но ничего не понял).
Заранее спасибо ! :)
Make Clarion Great Again ! 😎
Ал
✯ Ветеран ✯
Сообщения: 1038
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия
Поблагодарили: 1 раз

Re: Про кодировку

Сообщение Ал »

Привет!
Не поможет http://www.дин-софт.рф/excelexportimport.php (см. Для Delphi:)?
Когда-то мне надо было обратное - из текста UTF8 кракозябры перевернуть в русские - тоже искал в сети - на wiki описание формата + примеры конвертации из/в UTF8 - попадались в основном вариации на php, причем в 2 из 3 были ошибки в коде (кодах русск.символов). В программе сделал все просто - читал 2 байта - анализировал - менял на нужное.
Igor
Бывалый
Сообщения: 75
Зарегистрирован: 08 Июль 2005, 11:03
Откуда: Королев

Re: Про кодировку

Сообщение Igor »

Желательно в контексте использования под Clarion
Можно посмотреть в NetTalk от CapeSoft в модуле NetAll.clw -> AnsiCStringToUnicodeCString
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Про кодировку

Сообщение Алексей- Софт-Центр »

Добрый день!
Мы долго бодались с функциями перевода,
после чего написали малюсенькую процедурку, которая все делает обычным if - then.

Алексей
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Про кодировку

Сообщение Yufil »

Добрый день!

Стандартно идёт сначала перевод в юникод, потом в ASCII

MultiByteToWideChar(65001,0,Address(UTFText),-1,Address(UnicodeText)...)
WideCharToMultiByte(1251,0,Address(UnicodeText),-1,Address(ASCIIText)...)

Надо почитать в MSDN описания и поюзать...
IKSoft
Посетитель
Сообщения: 45
Зарегистрирован: 27 Май 2010, 13:38

Re: Про кодировку

Сообщение IKSoft »

Вот мои функции

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

tcIO.mConvertStr           function(*cstring p_Str, long p_FromCP, long p_ToCP)
loc:pszTemp1 &cstring
loc:pszTemp2 &cstring
loc:Len     long
loc:Ret     long

loc:i       long
  code

  loc:len      = len(p_Str) * 2
  loc:pszTemp1 &= new(cstring(loc:len))
  loc:pszTemp2 &= new(cstring(loc:len))

  loc:ret = MultiByteToWideChar(p_FromCP, 0, address(p_Str), len(p_Str), address(loc:pszTemp1), loc:len)
  if loc:ret = 0
     Message('MultiByteToWideChar returns '&GetLastError())
  .

  loc:ret = WideCharToMultiByte(p_ToCP, 0 ,address(loc:pszTemp1), loc:ret, address(loc:pszTemp2),loc:Len,0, 0)

  loc:pszTemp2[loc:ret+1] = '<0>'
  p_Str = loc:pszTemp2

  dispose(loc:pszTemp1)
  dispose(loc:pszTemp2)
  return(0)

tcIO.mStr_UTF8_to_ANSI     function(*cstring p_Str)
  code
  return(self.mConvertStr(p_Str, CP_UTF8, CP_ACP))

tcIO.mStr_ANSI_to_UTF8     function(*cstring p_Str)
  code
  return(self.mConvertStr(p_Str, CP_ACP, CP_UTF8))

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

Re: Про кодировку

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

Спасибо ! Разобрался. Велик MSDN, да кто-бы его до конца читал.
Самое сложное было понять, что перекодировка должна быть в два этапа (ANSI -> Unicode, Unicode -> UTF-8).
Make Clarion Great Again ! 😎
Ал
✯ Ветеран ✯
Сообщения: 1038
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия
Поблагодарили: 1 раз

Re: Про кодировку

Сообщение Ал »

Про коды.
http://ru.wikipedia.org/wiki/%D0%AE%D0% ... 0%BE%D0%B4
http://ru.wikipedia.org/wiki/UTF8
"Материал из Википедии — свободной энциклопедии
Юнико́д или Унико́д (англ. Unicode) — стандарт кодирования символов, позволяющий представить знаки практически всех письменных языков.
Стандарт предложен в 1991 году некоммерческой организацией «Консорциум Юникода» (англ. Unicode Consortium, Unicode Inc.). Стандарт состоит из двух основных разделов: универсальный набор символов (англ. UCS, universal character set) и семейство кодировок (англ. UTF, Unicode transformation format). Универсальный набор символов задаёт однозначное соответствие символов кодам — элементам кодового пространства, представляющим неотрицательные целые числа. Семейство кодировок определяет машинное представление последовательности кодов UCS.
...
UTF-8 — представление Юникода, обеспечивающее наилучшую совместимость со старыми системами, использовавшими 8-битные символы. Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. И наоборот, в тексте UTF-8 любой байт со значением меньше 128 изображает символ ASCII с тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байт (на деле, только до 4 байт, поскольку в Юникоде нет символов с кодом больше 10FFFF, и вводить их в будущем не планируется), в которых первый байт всегда имеет вид 11xxxxxx, а остальные — 10xxxxxx.
Формат UTF-8 был изобретён 2 сентября 1992 года Кеном Томпсоном и Робом Пайком и реализован в Plan 9. Сейчас стандарт UTF-8 официально закреплён в документах RFC 3629 и ISO/IEC 10646 Annex D. Символы UTF-8 получаются из Unicode следующим образом..."
Ответить