|
Вопрос # 2 689/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
delphi 2009
вообщем проблема с кодировкой.
s := 'привет';
AnsitoUtf8(s);
Memo_status.Lines.Add(s);
в delphi 7 работало, а тут неработает?
как быть?
 |
Вопрос задал: Cool (статус: Посетитель)
Вопрос отправлен: 27 апреля 2009, 06:06
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 22; последнее сообщение — 25 марта 2010, 15:37; участников в обсуждении: 4.
Страницы: [1] [2] [Следующая »]
|
Cool (статус: Посетитель), 27 апреля 2009, 06:46 [#1]:
вообщем мне надо из "привет" получить
%EF%F0%E8%E2%E5%F2
|
|
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 (статус: Посетитель), 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 (статус: Посетитель), 27 апреля 2009, 15:46 [#6]:
при гете на мамбу (charset=UTF-8) слова нармально отображаются.
а при гете vkontakte.ru (windows-1251) получаеться ероглифы.
получаеться надо из windows-1251 в UTF-8 ?
|
|
Cool (статус: Посетитель), 27 апреля 2009, 15:50 [#7]:
функцией html := Utf8Encode(html); неполучаеться..
|
|
Вадим К (статус: Академик), 27 апреля 2009, 15:57 [#8]:
да, надо преобразовывать. Отображаются нормально, потому что в делфи тоже юникод.
Там вроде была AnsiToUTF8, но я плохо помню
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Cool (статус: Посетитель), 27 апреля 2009, 15:59 [#9]:
нее
ansiStr := AnsiToUTF8(html);
html := AnsiToUTF8(html);
не работает!...
|
|
Вадим К (статус: Академик), 27 апреля 2009, 16:08 [#10]:
а html - это просто string?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Cool (статус: Посетитель), 27 апреля 2009, 16:09 [#11]:
ага
|
|
Вадим К (статус: Академик), 27 апреля 2009, 16:16 [#12]:
и что мы жалуемся? инди и компилятор за нас уже сделали какое то преобразование и мы теперь пытаемся восстановить. Надо считывать в массив, проверять кодировку и потом преобразовывать в строку. А иначе будут проблемы.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Cool (статус: Посетитель), 27 апреля 2009, 16:28 [#13]:
немогу понять как? точнее просто незнаю как считать в массив и проверить кодеровку и тем более преобразовать в строку.
простите.
|
|
Cool (статус: Посетитель), 27 апреля 2009, 16:29 [#14]:
я на готовых кодах учился...
|
|
Вадим К (статус: Академик), 27 апреля 2009, 16:50 [#15]:
ну как как. заводим массив байтов array of byte и считываем туда. А дальше задача угадать, что за кодировка. Ведь дело даже в том, что в коде может быть прописана одна кодировка, а сам текст быть в другой - программеры тоже ошибаются.
Можно анализировать кодироку по ответу сервера.
А потом преобразовываем. Но это так с головы не напишу. не помню всех функций.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Quark (статус: 1-ый класс), 28 апреля 2009, 08:13 [#16]:
Попробуй функции UTF8Encode и UTF8Decode
|
|
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 (статус: Посетитель), 25 марта 2010, 11:49 [#19]:
Тем не менее все почему то работает. Делал преобразование строки "Проверка" в итоге результируемая строка была "Проверка".
|
|
Вадим К (статус: Академик), 25 марта 2010, 12:01 [#20]:
Вот это самое ужасное "но почему то работает". Нельзя так. А завтра не заработает, потому что разработчики делфи что то поменяют (и имеют право в рамках официального описания).
То, что происходит в приведенном выше коде, это маленький финт. Потому что строка AnsiString позволяет сохранять внутри себя любой набор байт, даже последовательности нулей.
Ну а функция UTF8ToUnicodeString пробет интерпретировать эту последовательность байт как UTF-8 и преобразовать в юникод. А вот получиться или нет - другое дело. С таким же успехом можно было бы брать массив байт.
Цитата (Antony41):
В Memo Будет преобразована строка с Ansi в UTF8
В мемо будет строка преобразованная с UTF-8 в юникод. Чувствуете разницу?
Галочка "подтверждения прочтения" - вселенское зло.
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|