Страница 1 из 1
					
				Про кодировку
				Добавлено: 15 Февраль 2011, 12:25
				 Игорь Столяров
				Привет всем !
Подскажите пожалуйста, как можно перекодировать обычную ASCII строку в UTF-8 ?
Желательно в контексте использования под Clarion (в сети много примеров для PHP - но ничего не понял).
Заранее спасибо ! 

 
			
					
				Re: Про кодировку
				Добавлено: 15 Февраль 2011, 14:07
				 Ал
				Привет!
Не поможет 
http://www.дин-софт.рф/excelexportimport.php (см. Для Delphi:)?
Когда-то мне надо было обратное - из текста UTF8 кракозябры перевернуть в русские - тоже искал в сети - на wiki описание формата + примеры конвертации из/в UTF8 - попадались в основном вариации на php, причем в 2 из 3 были ошибки в коде (кодах русск.символов). В программе сделал все просто - читал 2 байта - анализировал - менял на нужное.
 
			
					
				Re: Про кодировку
				Добавлено: 15 Февраль 2011, 14:29
				 Igor
				Желательно в контексте использования под Clarion 
Можно посмотреть в NetTalk от CapeSoft в модуле NetAll.clw  -> AnsiCStringToUnicodeCString
 
			
					
				Re: Про кодировку
				Добавлено: 15 Февраль 2011, 17:18
				 Алексей- Софт-Центр
				Добрый день!
   Мы долго бодались с функциями перевода,
  после чего написали малюсенькую процедурку, которая все делает обычным if - then.
    
   Алексей
			 
			
					
				Re: Про кодировку
				Добавлено: 15 Февраль 2011, 17:22
				 Yufil
				Добрый день! 
Стандартно идёт сначала перевод в юникод, потом в ASCII 
                  MultiByteToWideChar(65001,0,Address(UTFText),-1,Address(UnicodeText)...)
                  WideCharToMultiByte(1251,0,Address(UnicodeText),-1,Address(ASCIIText)...)
Надо почитать в MSDN описания и поюзать...
			 
			
					
				Re: Про кодировку
				Добавлено: 15 Февраль 2011, 17:25
				 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))
 
			
					
				Re: Про кодировку
				Добавлено: 15 Февраль 2011, 18:13
				 Игорь Столяров
				Спасибо ! Разобрался. Велик MSDN, да кто-бы его до конца читал.
Самое сложное было понять, что перекодировка должна быть в два этапа (ANSI -> Unicode, Unicode -> UTF-8).
			 
			
					
				Re: Про кодировку
				Добавлено: 15 Февраль 2011, 19:36
				 Ал
				Про коды.
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 следующим образом..."