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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2017, 17:47   #1
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию Проблема с кодировкой (перенёс utf8toansi из 7 в XE)

Здравствуйте!
Собственно, в заголовке практически вся проблема. Раньше программа "собиралась" в D7, потом "допиливалась" в XE, теперь начал её переделывать вчистую в XE и наткнулся на эту проблему. Получаю страницу с сайта, в D7 кириллицу к нормальному виду приводила utf8toansi, а тут ни с ней, ни без неё нормального текста нет... Чем справиться?
Ship_1 вне форума Ответить с цитированием
Старый 19.09.2017, 20:53   #2
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
По умолчанию

Код:
var
  HTTP: TIdHTTP;
  SS: TStringStream;
  s: String;
begin
  try
    HTTP := TIdHTTP.Create(nil);
    HTTP.ConnectTimeout := 5000;
    SS := TStringStream.Create('');
    try
      HTTP.Get(URL, SS);
      SS.Position := 0;
      s := Utf8ToAnsi(RawByteString(SS.DataString));
    except
    end;
  finally
    FreeAndNil(HTTP);
    FreeAndNil(SS);
  end;
end;
Shouldercannon вне форума Ответить с цитированием
Старый 19.09.2017, 21:48   #3
GoldenEagle88
 
Регистрация: 24.07.2015
Сообщений: 8
По умолчанию

А чем работаешь со стр?Synapse,Indy ?
GoldenEagle88 вне форума Ответить с цитированием
Старый 20.09.2017, 12:01   #4
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Shouldercannon, класс! Сработало! Хитрый способ.
GoldenEagle88, Indy.
Ship_1 вне форума Ответить с цитированием
Старый 20.09.2017, 12:05   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так ansi-то вам зачем? ХЕ ж поддерживает юникод везде.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 20.09.2017, 12:30   #6
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Да фиг знает чего там передаётся со страницы, но перенесённый с D7 код в обоих случаях крякозябры выдавал (и при utf8toansi, и без этого). А способ, который предложил Shouldercannon выдаёт нормальную кириллицу.
Ship_1 вне форума Ответить с цитированием
Старый 20.09.2017, 13:35   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Это неправильное решение, просто в Дельфи 7 не было других вариантов (без сторонних контролов типа TNT). Оно не будет работать если в настройках ОС стоит не русская локаль, ну и кроме кириллицы существуют другие символы, которые сломаются.
+ Дельфи все равно наверняка конвертирует это в Юникод перед выводом.

Наверно надо Utf8ToString или DecodeUtf8
http://docwiki.embarcadero.com/RADSt...rsion_Routines
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 20.09.2017, 14:27   #8
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Это неправильное решение, просто в Дельфи 7 не было других вариантов (без сторонних контролов типа TNT). Оно не будет работать если в настройках ОС стоит не русская локаль, ну и кроме кириллицы существуют другие символы, которые сломаются.
+ Дельфи все равно наверняка конвертирует это в Юникод перед выводом.

Наверно надо Utf8ToString или DecodeUtf8
http://docwiki.embarcadero.com/RADSt...rsion_Routines
Полностью английская версия Win 10. Всё прекрасно работает, даже символ.
По приведённой Вами ссылке в коде присутствует Utf8ToAnsi
Код:
s := Utf8ToAnsi(RawByteString(SS.DataString));
Изображения
Тип файла: jpg Безымянный.jpg (51.1 Кб, 118 просмотров)
Shouldercannon вне форума Ответить с цитированием
Старый 20.09.2017, 14:45   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что "даже символ"? � это "неизвестный символ" https://ru.wikipedia.org/wiki/%D0%A1...BE%D0%BB%D1%8B

В смысле "присутствует"? Там список функций, если надо конвертировать в ANSI, то конечно нужно использовать эту функцию. А если надо просто вывести UTF-8 в современной Дельфи, то скорее всего достаточно просто Utf8ToString или DecodeUtf8. Какой смысл конвертировать Юникод в ANSI и обратно в Юникод?

А в "полностью английской" вин10 в региональных настройках локаль точно не русская стоит? (тот пункт, где написано про старые/не Юникод программы)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 20.09.2017, 17:28   #10
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Что "даже символ"? � это "неизвестный символ" https://ru.wikipedia.org/wiki/%D0%A1...BE%D0%BB%D1%8B

В смысле "присутствует"? Там список функций, если надо конвертировать в ANSI, то конечно нужно использовать эту функцию. А если надо просто вывести UTF-8 в современной Дельфи, то скорее всего достаточно просто Utf8ToString или DecodeUtf8. Какой смысл конвертировать Юникод в ANSI и обратно в Юникод?

А в "полностью английской" вин10 в региональных настройках локаль точно не русская стоит? (тот пункт, где написано про старые/не Юникод программы)
Теперь с нормальными символами.
Изображения
Тип файла: jpg Безымянный.jpg (91.3 Кб, 119 просмотров)
Shouldercannon вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
utf8toansi не работает в DelphiXE? Ship_1 Общие вопросы Delphi 13 17.12.2017 17:50
проблема с кодировкой serres PHP 0 05.04.2011 19:12
Проблема с кодировкой Abuhamed PHP 2 25.12.2010 21:47
Проблема с кодировкой cheef PHP 6 02.12.2010 12:27
проблема с кодировкой Demonmov C++ Builder 1 02.06.2010 01:15