|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Перевод из Tstring в UTF8 |
|
Delphi - Перевод из Tstring в UTF8
|
Новый участник Сообщения: 1 |
У меня проблема. Нужно перекодировадь текст из TMemo в UTF8 кодировку и потом вывести в файл. Как вывести знаю, а как перевести нет. Подскажите решение
|
|
Отправлено: 21:09, 28-07-2008 |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать кодируется просто: все символы с кодом < 128 остаются сами собой. С остальными поступают так:
1. разбивают символы на биты: xxxxxxxx xxxxxxxx 2. начиная с младшего бита, начинают рассовывать по 6 бит в байт, причём старшие 2 бита 10: ... 10xxxxxxx 10xxxxxxx 3. в самом первом байте в начале идёт столько единичек, сколько байт закодируют один символ, а потом бит 0, например: 2 байта: 110xxxxx 10xxxxxx 3 байта: 1110xxxx 10xxxxxx 10xxxxxx 4 байта: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 4. хотя можно один и тот же символ закодировать хоть каким количеством байт (за счёт нулей в старших битах), рекомендуется считать последовательности с избыточным кодированием ошибочными, например символ с кодом 511: 511 = 00000001 11111111 2 байта: 11000111 10111111 3 байта: 11100000 10000111 10111111 - неверный символ, т.к. можно закодировать 2-мя байтами Таким образом, перебираешь поочереди все символы в своём тексте, получаешь код каждого (только UNICODE). Определяешь, сколько нужно байт на кодировку символа и распихиваешь его биты по байтам. Если хочешь проверить правильность текста, открой потом блокнотом в windows XP. И ещё: при сохранении файла принято указывать в каком порядке идут байты в многобайтовой кодировке. Для этоко в начале файла ставится символ FF FE (65534), в utf8 он кодируется последовательностью EF BB BF |
Отправлено: 08:34, 29-07-2008 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать pva, Всё бы хорошо. Но шаг "получаешь код каждого (только UNICODE)" не раскрыт, хотя по факту является одним из самых сложных. Ибо нужна таблица соответствия "номер в одной кодировке <-> номер в unicode". В любом случае, руками это делать не стоит, потому что для любого приличного языка существуют подходящие библиотеки.
Беглый поиск показывает, что в дельфи существуют пары функций UTF8Encode, UTF8Decode и AnsiToUtf8, Utf8ToAnsi. Пользователем дельфи не являюсь, но думаю, что в документации они достаточно подробно описаны. |
------- Отправлено: 20:08, 29-07-2008 | #3 |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать а, у делфи разве не уникодовские коды? я на билдер равнялся просто, извиняюсь. Уникодовские - в смысле WideChar, та самая обычная виндовая 2-байтовая
|
Отправлено: 14:11, 30-07-2008 | #4 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать pva, раньше точно юникодных в=строк не было (по крайней мере их поддержки в VCL). Сейчас не знаю.
|
|
------- Отправлено: 14:19, 30-07-2008 | #5 |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать В хелпе от делфи 5:
function StringToWideChar(const Source: string; Dest: PWideChar; DestSize: Integer): PWideChar; |
Отправлено: 14:25, 30-07-2008 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - Тип char, определение кодировки (UTF8 или ANSI) | EvgeniyQQQ | Программирование и базы данных | 4 | 30-03-2013 01:06 | |
MySQL - [решено] [mysqldump] дамп базы в utf8 | Ramzes_ | Программирование и базы данных | 3 | 20-10-2008 13:25 | |
[решено] кодировка utf8 для базы | dima1981 | Вебмастеру | 34 | 09-08-2008 09:23 | |
перевод таблицы | clop1000 | Программное обеспечение Windows | 2 | 23-10-2007 23:54 | |
[решено] перекодировка сайта с cp1251 в utf8 | VeshchiyOleg | Вебмастеру | 7 | 18-07-2007 13:18 |
|