Страница 1 из 1

Как работать с UTF-8

Добавлено: 22 мар 2012, 16:59
Dr_Grizzly
Всем привет! Появилась задача выгружать данные из базы в текстовый файл в формате UTF-8, не соображу какими способами это можно сделать. Есть у кого уже навык работы с этим? Посоветуйте плиз.

Погуглил малость - нашел функцию UTF8Encode() теоретически если записывать в мемо текст используя эту функцию - то после сохранения содержимого мемо в файл - он говорит якобы кодировка utf-8. Одна фигня только - я не вижу что написано в мемо....

Re: Как работать с UTF-8

Добавлено: 22 мар 2012, 18:15
Duncon
Либо перекодировкой занимайся при которой будет потеря данных, либо использую utf компоненты т.е. дэльфя от 2009 года тебе нужна.

Re: Как работать с UTF-8

Добавлено: 23 мар 2012, 12:53
Игорь Акопян
дык если тебе просто файл записать, зачем смотреть его в мемо? Для старых дельфей есть ТНТ компоненты, но по-моему лучше уж на Д09 и старше переходить...

Re: Как работать с UTF-8

Добавлено: 05 апр 2012, 09:43
BBB
Можно воспользоваться парой функций:
1) MultiByteToWideChar - преобразуем из "обычного" текста в Unicode
2) WideCharToMultiByte - преобразуем из Unicode в UTF-8 (или вообще в любую другоу кодирову при необходимости)

Более подробно. Сперва MultiByteToWideChar вызываем, указывая параметр cchWideChar (размер буфера-получателя) как ноль. При аком вызове ф-ия возвращает требуемый размер буфера, необходимый для размещения строки результата. Выделяем в памяти буфер нужного размера и делаем повторный вызов уже для преобразования строки.
Другие параметры, передаваемые в ф-ию:
CodePage = 1251 (или 866, если вдруг исходная строка в DOS-кодировке :) )
dwFlags = 0
lpMultiByteStr = указатель на исходную строку
cbMultiByte = длина (в байтах) исходной строки
lpWideCharStr = указатель на буфер-приемник (выделенный после первого шага)
cchWideChar = размер буфера-приемника (результат вызова ф-ии на перовом шаге)

Далее аналогичным образом (т.е. тоже "в два прохода") пользуемся ф-ей WideCharToMultiByte.
Задаем CodePage = CP_UTF8 (это WinAPI-шная константа, если что, она имеет значение 65001)

адвокат

Добавлено: 18 окт 2012, 00:30
gralScaro