Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2010, 00:07   #1
Terikon
Форумчанин
 
Регистрация: 22.02.2009
Сообщений: 174
Радость Проблемы с кодировкой UTF8

Вот так всё кодируется отлично в ответ получаю закодированную букву 'ы'
Код:
begin
Edt1.Text:=#1099;
Edt2.Text:=UTF8Decode(Edt1.Text);
end;
Но если делать так
Код:
begin
Edt1.Text:=Edt4.Text; \\ в Edit4 пишу #1099
Edt2.Text:=UTF8Decode(Edt1.Text);
end;
То в ответ получаю текст из Edt4 (#1099) тоесть не перекодированный

Последний раз редактировалось Arigato; 27.06.2010 в 01:20. Причина: Название
Terikon вне форума Ответить с цитированием
Старый 27.06.2010, 00:16   #2
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

Нужно использовать utf8_encode.


Добавлено позже:

Чет с кодом не разобрался, не то посоветовал.
Попробовал у себя.
Тут, видимо дело в том, что #1099 в Edite воспринимается как 5 разных символов, а не как номер одного.
Надо глядеть в сторону Chr.
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab

Последний раз редактировалось ex.cluz; 27.06.2010 в 00:45.
ex.cluz вне форума Ответить с цитированием
Старый 27.06.2010, 00:38   #3
Terikon
Форумчанин
 
Регистрация: 22.02.2009
Сообщений: 174
По умолчанию

Цитата:
Сообщение от ex.cluz Посмотреть сообщение
Нужно использовать utf8_encode.
вместо UTF8Decode ?

или так Edt1.Text:=UTF8encode(Edt4.Text); ?

пробовал так Edt1.Text:=chr(Edt4.Text);
не компилится(

Последний раз редактировалось Stilet; 29.06.2010 в 10:36.
Terikon вне форума Ответить с цитированием
Старый 27.06.2010, 01:14   #4
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

Проблема в том, что когда в эдит1 программно добавить #1099, то делфи автоматически распознает, что это один символ, а вот когда вводится вручную - это становится обычной строкой.

Самому интересно стало, сейчас раберусь.


Добавлено позже:

Вот так попробуйте:
Код:
Edit2.Text:=UTF8Decode(Chr(StrToInt(Edit1.Text)));
Но учтите, что в поле Эдит1 нужно вводить только число (1099) без решетки.
А если обязательно с решеткой - то ее нужно удалять перед этой операцией.

Проблема решена?
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab

Последний раз редактировалось ex.cluz; 27.06.2010 в 01:19.
ex.cluz вне форума Ответить с цитированием
Старый 27.06.2010, 01:27   #5
Terikon
Форумчанин
 
Регистрация: 22.02.2009
Сообщений: 174
По умолчанию

Цитата:
Проблема решена?
К сожалению нет, делаю так
Код:
Edt1.Text:=Edt4.Text;
Edt2.Text:=UTF8Decode(Chr(StrToInt(Edt1.Text)));
в ответ получаю код из Edt4 то есть 1099
а как быть если не одна буква а слово?

PS у меня делфи 2010, в делфи7 вообще почему то не конвертирует, хотя код вставляю такой же как и в делфи 10
Terikon вне форума Ответить с цитированием
Старый 27.06.2010, 01:37   #6
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

У меня Делфи 2007.
Поддержку Юникода как раз с 2009 или с 2010 ввели.

А зачем вам конвертация нужна?
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab
ex.cluz вне форума Ответить с цитированием
Старый 27.06.2010, 01:41   #7
Terikon
Форумчанин
 
Регистрация: 22.02.2009
Сообщений: 174
По умолчанию

Цитата:
Сообщение от ex.cluz Посмотреть сообщение
У меня Делфи 2007.
Поддержку Юникода как раз с 2009 или с 2010 ввели.

А зачем вам конвертация нужна?
Get(через инди) запросом получаю текст со страницы, и там есть закодированный текст такова вида.
Terikon вне форума Ответить с цитированием
Старый 27.06.2010, 01:47   #8
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

Вот функции:
Цитата:
AnsiToUtf8(const S: string): UTF8String - перекодирует строку в формат UTF8.
PUCS4Chars(const S: UCS4String): PUCS4Char - возвращает указатель на первый символ строки формата UCS-4 для работы со строкой, как с последовательностью символов, заканчивающейся символом с кодом нуль.
StringToWideChar(const Source: string; Dest: PWideChar; DestSize: Integer): PWideChar - преобразует стандартную строку к последовательности Unicode-символов, завершающейся символом с кодом нуль.
UCS4StringToWideString(const S: UCS4String): WideString - преобразует строку формата UCS-4 к строке формата Unicode.
Utf8Decode(const S: UTF8String): WideString - преобразует строку формата UTF-8 к строке формата Unicode.
Utf8Encode(const WS: WideString): UTF8String - преобразует строку формата Unicode к строке формата UTF-8.
Utf8ToAnsi(const S: UTF8String): string - преобразует строку формата UTF-8 к стандратной строке.
WideCharLenToString(Source: PWideChar; SourceLen: Integer): string - преобразует строку формата Unicode к стандартной строке. Длина исходной строки задается параметром SourceLen.
WideCharLenToStrVar(Source: PWideChar; SourceLen: Integer; var Dest: string) - аналог предыдущей функции - преобразует строку формата Unicode к стандартной строке. Длина исходной строки задается параметром SourceLen, а результат возвращается через параметр Dest.
WideCharToString(Source: PWideChar): string - преобразует последовательность Unicode-символов, завершающуюся символом с кодом нуль, к стандартной строке.
WideCharToStrVar(Source: PWideChar; var Dest: string) - аналог предыдущей функции - преобразует последовательность Unicode-символов, завершающуюся символом с кодом нуль, к стандартной строке. Результат возвращается через параметр Dest.
WideStringToUCS4String(const S: WideString): UCS4String - преобразует строку формата Unicode к строке формата UCS-4.
Надеюсь, чего-то стоящее найдете. Я лично с такой проблемой не сталкивался.
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab
ex.cluz вне форума Ответить с цитированием
Старый 27.06.2010, 01:51   #9
Terikon
Форумчанин
 
Регистрация: 22.02.2009
Сообщений: 174
По умолчанию

например если вставить в сообщение на практически любой форум такой знак ( _&_#1043; ) без(_) то он конвертируется в букву, как бы такое реализовать на делфи

Последний раз редактировалось Terikon; 27.06.2010 в 01:59.
Terikon вне форума Ответить с цитированием
Старый 27.06.2010, 01:59   #10
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию


[OFFTOP]
Завтра прикину со свежей головой
[/OFFTOP]
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab
ex.cluz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чём проблема? (Работа с WebBrowser) Lauri Общие вопросы Delphi 0 01.04.2010 11:26
Не знаю в чём проблема, в сетевой карте, или в винде Altera Компьютерное железо 11 11.11.2009 15:21
Не знаю в чём проблема Castro Паскаль, Turbo Pascal, PascalABC.NET 5 24.12.2008 01:38
Ресурсы приложения, не пойму в чём проблема. Air Общие вопросы Delphi 13 10.08.2008 21:44