Страница 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 следующим образом..."