|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Символ из другой кодировки
Есть строка с испанским символом в начале ¿
эту строку я беру из стороннего ini, там этот символ записан как ї. Так же я вижу если открыть ини блокнотом, но если открыть в Notpad++, то символ корректный. Как мне тогда прочитать его в делфи? |
#2
|
|||
|
|||
Зависит от версии.
Если Delphi >= 2009, то можно просто читать в строку. Если меньше, то надо читать в WideString с, возможно, дополнительным переврдом из Unicode. |
#3
|
|||
|
|||
Цитата:
Немного не понял "просто" я вроде просто и пытаюсь Код:
aStr:= ini.ReadString('xx', 'yy', 'error'); |
#4
|
|||
|
|||
Цитата:
Ну надо и писать, что из ini читаешь. Видимо, там есть какие-то внутренние заморочки. Так что скорее всего она читается без кодировки. Тогда надо читать указывая соотв. кодировку. Посмотри пример тут: https://stackoverflow.com/questions/...coded-ini-file |
#5
|
|||
|
|||
Вроде писал, что читаю со стороннего ини, ну да ладно, может и плохо описал.
По сути проблемы все не так просто: как входные данные мы имеем файл в 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
|
|||
|
|||
Ну, на вскидку решения у меня нет.
Есть только идея. Если знаешь язык, то надо создать новую AnsiString, установить в нее нужную кодировку и потом просто попробовать считать из файла в нее, а протом из нее попробовать сразу перекодировать в юникод. Ну или та же идея, но пользоваться функциями API и получать PCHAR (который виндовый, ну или PBytes) и уже оттуда конвертировать в нужной кодировке. Короче - нашел ты себе геморой на пятую точку. ЗЫ. А кстати, такой эксперимент. Надо установить дефолтную кодировку для non-Unicode программ в нужный язык, а потом попробовать считать эту строку обычным образом. Считается правильно или нет... Последний раз редактировалось lmikle, 08.06.2018 в 21:21. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
nixon232 (08.06.2018)
|