Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.06.2018, 20:15
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию Символ из другой кодировки

Есть строка с испанским символом в начале ¿

эту строку я беру из стороннего ini, там этот символ записан как ї. Так же я вижу если открыть ини блокнотом, но если открыть в Notpad++, то символ корректный. Как мне тогда прочитать его в делфи?
Ответить с цитированием
  #2  
Старый 07.06.2018, 20:54
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Зависит от версии.
Если Delphi >= 2009, то можно просто читать в строку.
Если меньше, то надо читать в WideString с, возможно, дополнительным переврдом из Unicode.
Ответить с цитированием
  #3  
Старый 07.06.2018, 21:30
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Цитата:
Сообщение от lmikle
Зависит от версии.
Если Delphi >= 2009, то можно просто читать в строку.
Если меньше, то надо читать в WideString с, возможно, дополнительным переврдом из Unicode.
Версия 10.1 Berlin
Немного не понял "просто"
я вроде просто и пытаюсь
Код:
 aStr:= ini.ReadString('xx', 'yy', 'error');
но символ не тот
Ответить с цитированием
  #4  
Старый 08.06.2018, 03:33
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от nixon232
Версия 10.1 Berlin
Немного не понял "просто"
я вроде просто и пытаюсь
Код:
 aStr:= ini.ReadString('xx', 'yy', 'error');
но символ не тот

Ну надо и писать, что из ini читаешь. Видимо, там есть какие-то внутренние заморочки. Так что скорее всего она читается без кодировки. Тогда надо читать указывая соотв. кодировку.
Посмотри пример тут: https://stackoverflow.com/questions/...coded-ini-file
Ответить с цитированием
  #5  
Старый 08.06.2018, 09:38
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Вроде писал, что читаю со стороннего ини, ну да ладно, может и плохо описал.
По сути проблемы все не так просто: как входные данные мы имеем файл в Ansi (как оказалось) и если я укажу принудительно
Код:
 ini := TMemIniFile.Create(path,TEncoding.UTF8);
то просто вылетаю в ошибку мол нет юникод-символов.
Если пересохранить файл в Utf, ошибка уходит, но символ не отображается. Если его исправить в новом файле - то все видно. Но это мне ничего не дает, символ может быть и другой. Можно ли что-то сделать в таком случае?
Далее тоже образовалась проблема: если скормить строку с символом функции Mysql md5() И
Код:
begin
  with TIdHashMessageDigest5.Create do
    try
      Result := LowerCase(HashStringAsHex(Base));
    finally
      Free;
    end;
end;
Получаем разное значение, но тут пока не смотрел в чем проблема. разобраться бы с первым.

Последний раз редактировалось nixon232, 08.06.2018 в 13:32.
Ответить с цитированием
  #6  
Старый 08.06.2018, 21:18
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, на вскидку решения у меня нет.
Есть только идея.
Если знаешь язык, то надо создать новую AnsiString, установить в нее нужную кодировку и потом просто попробовать считать из файла в нее, а протом из нее попробовать сразу перекодировать в юникод.
Ну или та же идея, но пользоваться функциями API и получать PCHAR (который виндовый, ну или PBytes) и уже оттуда конвертировать в нужной кодировке.

Короче - нашел ты себе геморой на пятую точку.

ЗЫ. А кстати, такой эксперимент. Надо установить дефолтную кодировку для non-Unicode программ в нужный язык, а потом попробовать считать эту строку обычным образом. Считается правильно или нет...

Последний раз редактировалось lmikle, 08.06.2018 в 21:21.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
nixon232 (08.06.2018)
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:27.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter