Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 689

Раздел: Delphi » Прочее
/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!

delphi 2009

вообщем проблема с кодировкой.
s := 'привет';
AnsitoUtf8(s);
Memo_status.Lines.Add(s);

в delphi 7 работало, а тут неработает?
как быть?

Cool Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Cool (статус: Посетитель)
Вопрос отправлен: 27 апреля 2009, 06:06
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 22; последнее сообщение — 25 марта 2010, 15:37; участников в обсуждении: 4.

Страницы: [1] [2] [Следующая »]

Cool

Cool (статус: Посетитель), 27 апреля 2009, 06:46 [#1]:

вообщем мне надо из "привет" получить
%EF%F0%E8%E2%E5%F2
Cool

Cool (статус: Посетитель), 27 апреля 2009, 11:07 [#2]:

вообщем вот такие пироги


procedure TForm1.FormCreate(Sender: TObject);
var
s, s2:string;
utf8Str : UTF8String;
ansiStr:ansiString;
Raw: RawByteString;
i, j:integer;
begin
s2 := 'привет';

utf8Str := s2;
Raw := utf8Str;
SetCodePage(Raw, 1252, False);
Memo_status.Lines.Add(Raw);

ansiStr := s2;
for i := 1 to length(ansiStr) do
begin
j := ord(ansiStr[i]);
s := s + '%' + (Format('%x', [j]));
end;

Memo_status.Lines.Add(s);
end;
Вадим К

Вадим К (статус: Академик), 27 апреля 2009, 11:17 [#3]:

А всё лишь по той причине, что забывают, что в делфи 2009 теперь все строки юникодные. И зачем было для 7 дефли делать преобразование с анси в юникод - там и так мемо не понимало юникод. Но, это только на первый взгляд.
AnsitoUtf8(s); - эта строка ничего не делает с строкой s - это функция....
Галочка "подтверждения прочтения" - вселенское зло.
Cool

Cool (статус: Посетитель), 27 апреля 2009, 15:30 [#4]:

что то у вообще не врубаюсь как эту котеровку юзать!...
1.
url :='http://vkontakte.ru/search.php?';
html := Form_main.IdHTTP.Get(url);
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
2.
url :='http://mamba.ru/';
html := Form_main.IdHTTP.Get(url);
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

во 2 случаии всё нормально! как конвертировать?
Вадим К

Вадим К (статус: Академик), 27 апреля 2009, 15:35 [#5]:

во первых - контакт зло:) это мое мнение.
во вторых "котеровка" - это котировка ? или кодировка? Наверно второе.
Но суть проблемы тут не ясна. Кого конвертировать, куда....
Галочка "подтверждения прочтения" - вселенское зло.
Cool

Cool (статус: Посетитель), 27 апреля 2009, 15:46 [#6]:

при гете на мамбу (charset=UTF-8) слова нармально отображаются.
а при гете vkontakte.ru (windows-1251) получаеться ероглифы.

получаеться надо из windows-1251 в UTF-8 ?
Cool

Cool (статус: Посетитель), 27 апреля 2009, 15:50 [#7]:

функцией html := Utf8Encode(html); неполучаеться..
Вадим К

Вадим К (статус: Академик), 27 апреля 2009, 15:57 [#8]:

да, надо преобразовывать. Отображаются нормально, потому что в делфи тоже юникод.
Там вроде была AnsiToUTF8, но я плохо помню
Галочка "подтверждения прочтения" - вселенское зло.
Cool

Cool (статус: Посетитель), 27 апреля 2009, 15:59 [#9]:

нее
ansiStr := AnsiToUTF8(html);
html := AnsiToUTF8(html);

не работает!...
Вадим К

Вадим К (статус: Академик), 27 апреля 2009, 16:08 [#10]:

а html - это просто string?
Галочка "подтверждения прочтения" - вселенское зло.
Cool

Cool (статус: Посетитель), 27 апреля 2009, 16:09 [#11]:

ага
Вадим К

Вадим К (статус: Академик), 27 апреля 2009, 16:16 [#12]:

и что мы жалуемся? инди и компилятор за нас уже сделали какое то преобразование и мы теперь пытаемся восстановить. Надо считывать в массив, проверять кодировку и потом преобразовывать в строку. А иначе будут проблемы.
Галочка "подтверждения прочтения" - вселенское зло.
Cool

Cool (статус: Посетитель), 27 апреля 2009, 16:28 [#13]:

немогу понять как? точнее просто незнаю как считать в массив и проверить кодеровку и тем более преобразовать в строку.

простите.
Cool

Cool (статус: Посетитель), 27 апреля 2009, 16:29 [#14]:

я на готовых кодах учился...
Вадим К

Вадим К (статус: Академик), 27 апреля 2009, 16:50 [#15]:

ну как как. заводим массив байтов array of byte и считываем туда. А дальше задача угадать, что за кодировка. Ведь дело даже в том, что в коде может быть прописана одна кодировка, а сам текст быть в другой - программеры тоже ошибаются.
Можно анализировать кодироку по ответу сервера.
А потом преобразовываем. Но это так с головы не напишу. не помню всех функций.
Галочка "подтверждения прочтения" - вселенское зло.
Quark

Quark (статус: 1-ый класс), 28 апреля 2009, 08:13 [#16]:

Попробуй функции UTF8Encode и UTF8Decode
Antony41

Antony41 (статус: Посетитель), 25 марта 2010, 11:13 [#17]:

Вам необходимо использовать функцию UTF8ToUnicodeString
В Memo Будет преобразована строка с Ansi в UTF8
var 
s: AnsiString; 
begin
S:={Строка в ANSI Кодировке};
Memo1.Text:=UTF8ToUnicodeString(S);
Вадим К

Вадим К (статус: Академик), 25 марта 2010, 11:19 [#18]:

UTF8 и ANSI - это две далеко разные вещи, Antony41 !
Галочка "подтверждения прочтения" - вселенское зло.
Antony41

Antony41 (статус: Посетитель), 25 марта 2010, 11:49 [#19]:

Тем не менее все почему то работает. Делал преобразование строки "Проверка" в итоге результируемая строка была "Проверка".
Вадим К

Вадим К (статус: Академик), 25 марта 2010, 12:01 [#20]:

Вот это самое ужасное "но почему то работает". Нельзя так. А завтра не заработает, потому что разработчики делфи что то поменяют (и имеют право в рамках официального описания).
То, что происходит в приведенном выше коде, это маленький финт. Потому что строка AnsiString позволяет сохранять внутри себя любой набор байт, даже последовательности нулей.
Ну а функция UTF8ToUnicodeString пробет интерпретировать эту последовательность байт как UTF-8 и преобразовать в юникод. А вот получиться или нет - другое дело. С таким же успехом можно было бы брать массив байт.

Цитата (Antony41):

В Memo Будет преобразована строка с Ansi в UTF8

В мемо будет строка преобразованная с UTF-8 в юникод. Чувствуете разницу?:)
Галочка "подтверждения прочтения" - вселенское зло.

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 2 апреля 2020, 02:37
Выполнено за 0.01 сек.
Рейтинг@Mail.ru