Извечная проблема lazarus кириллица и юникод

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Аватара пользователя
Максим
энтузиаст
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Сообщение Максим »

Проверяйте кодировку всех строк, конкатенацию которых вы производите. В вашем случае она должна быть UTF8.
Apromix
новенький
Сообщения: 28
Зарегистрирован: 06.10.2010 15:15:51
Откуда: Черновцы, Украина

Сообщение Apromix »

В Windows у меня значение ParamStr(0) отображается знаками вопросов (текст "Новая папка"):
laz0003472916.png

Как с этим бороться?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

SysToUTF8
Apromix
новенький
Сообщения: 28
Зарегистрирован: 06.10.2010 15:15:51
Откуда: Черновцы, Украина

Сообщение Apromix »

Спасибо. Еще вопрос. Вот код:

Код: Выделить всё

  SL := TStringList.Create;
  SL.LoadFromFile(Path + 'file_utf-8.txt');
  ShowMessage(SL[0]);
  SL.Free;


Вот что получаю (квадратик вначале)...
laz000347244578.png


Как правильно?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

SL.Strings[0]
Apromix
новенький
Сообщения: 28
Зарегистрирован: 06.10.2010 15:15:51
Откуда: Черновцы, Украина

Сообщение Apromix »

Это не то! Что SL[0], что SL.Strings[0] - результат один. Strings по-моему стоит default.
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

А что внутри файла?
Apromix
новенький
Сообщения: 28
Зарегистрирован: 06.10.2010 15:15:51
Откуда: Черновцы, Украина

Сообщение Apromix »

В кодировке UTF-8:

Код: Выделить всё

Строка 1
Строка 2
Строка 3
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

что выведет конструкция вида:

Код: Выделить всё

ShowMessage(IntToHex(Ord(SL[0][1]),2));

?
Apromix
новенький
Сообщения: 28
Зарегистрирован: 06.10.2010 15:15:51
Откуда: Черновцы, Украина

Сообщение Apromix »

Вотъ:

laz379804.png


Добавлено спустя 21 минуту 19 секунд:
Ага, разобрался :) Первый знак - сигнатура юникода. Она может быть или не быть. При сохранении в редакторе можно поставить соответ. птичку. Я правильно понимаю? Она позволяет узнать, является ли файл utf8?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Всё ясно. У вас в файле содержится так называемая BOM метку.
Apromix
новенький
Сообщения: 28
Зарегистрирован: 06.10.2010 15:15:51
Откуда: Черновцы, Украина

Сообщение Apromix »

Да, вот еще код, который определяет ее наличие и удаляет, если сигнатура есть.

Код: Выделить всё

  if (Copy(SL[0], 1, 3) = #239#187#191) then
  begin
    Tmp := SL[0];
    Delete(Tmp, 1, 3);
    SL[0] := Tmp;
  end;
Ответить