powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Кодировка текста (про TEncoding читал и пробовал)
10 сообщений из 35, страница 2 из 2
Кодировка текста (про TEncoding читал и пробовал)
    #39146672
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kv67, несложно сообразить, что раз автор вопроса говорит про TEncoding - то он использует Delphi 2009 и выше, где String = UnicodeString = двухбайтовая строка.

Соответственно, этот код (написанный в предположении Delphi 2007 и ниже, где String = AnsiString = однобайтовая строка) правильно работать не будет.
...
Рейтинг: 0 / 0
Кодировка текста (про TEncoding читал и пробовал)
    #39146678
kv67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GunSmoker,

Согласен, у меня - Delphi 7.
...
Рейтинг: 0 / 0
Кодировка текста (про TEncoding читал и пробовал)
    #39146694
kv67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GunSmoker,

А если так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
function ConvFromDOS(Source: AnsiString): AnsiString;
var
  i: integer;

begin
  Result := '';
  for i := 1 to Length(Source) do
    begin
      case Ord(Source[i]) of
        240: Source[i] := AnsiChar(168);
        241: Source[i] := AnsiChar(184);
        252: Source[i] := AnsiChar(185);
          else
        if (Ord(Source[i]) > 127) then
          if Ord(Source[i]) < 176 then
            Source[i] := AnsiChar(Ord(Source[i]) + 64)
              else
            Source[i] := AnsiChar(Ord(Source[i]) + 16);
      end;
    end;
  Result := Source;
end;
...
Рейтинг: 0 / 0
Кодировка текста (про TEncoding читал и пробовал)
    #39146833
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kv67, в D2009+ AnsiString-строки - это не просто однобайтовые буфера. Там дополнительно хранится ещё кодовая страница. Соответственно, по умолчанию в AnsiString она = CP_ACP, что на "русской Windows" = 1251. Ну и когда в такую строку пихают хрен знает что (= " не текст в 1251") - ничего хорошего из этого обычно не получается.

Для фиксированных кодовых страниц есть type AnsiString( CP ), для произвольных кодовых страниц - RawByteString (ну либо TEncoding). Для особых извращенцев есть ещё SetCodePage.

И нафиг не нужно в D2009+ выполнять какие-то преобразования руками. Достаточно понимать, что у тебя где лежит (где байты, где строки, и где какая кодировка) - и всё преобразуется простым присвоением одного к другому. Я в упор не вижу, что тут сложного/непонятного. Не надо лепить монстров - просто нажмите F1.
...
Рейтинг: 0 / 0
Кодировка текста (про TEncoding читал и пробовал)
    #39146855
Сергей из Самары
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чего не сделать простым способом?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
    Procedure TForm1.BitBtn1Click(Sender: TObject);
    var OldStr,NewStr:string;
    begin
      OldStr:='+&#186;&#244;&#247;&#240; T&#248;&#244;&#248;  -&#252;&#248;&#170;&#168;&#248;&#245;&#242;&#253;&#240;';
      SetLength(NewStr, Length(OldStr));
      if OemToChar(PChar(OldStr),PChar(NewStr)) then
       showmessage(NewStr);
    end;
...
Рейтинг: 0 / 0
Кодировка текста (про TEncoding читал и пробовал)
    #39146858
Сергей из Самары
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей из Самары,

Чего-то при копировании кодировка 866 слетела.
oldstr в кодировке dos
...
Рейтинг: 0 / 0
Кодировка текста (про TEncoding читал и пробовал)
    #39146864
Сергей из Самары
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще правильней так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
    Procedure TForm1.BitBtn1Click(Sender: TObject);
    var OldStr:string;
    begin
      OldStr:='+&#186;&#244;&#247;&#240; T&#248;&#244;&#248;  -&#252;&#248;&#170;&#168;&#248;&#245;&#242;&#253;&#240;';
      if OemToChar(PChar(OldStr),PChar(OldStr)) then
       showmessage(OldStr);
    end;



Правда, давно уже с этой функцией работал, пишу по ппамяти, так что могу немного где-то ошибиться. Нужно проверить на проекте.
...
Рейтинг: 0 / 0
Кодировка текста (про TEncoding читал и пробовал)
    #39146871
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищи, вы голову совсем/принципиально не включаете? Или читать не умеете? Как можно постить код сразу после детального объяснения, почему он не будет работать?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Кодировка текста (про TEncoding читал и пробовал)
    #39905597
yemets63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmoker,

прошло почти 4 года с топика.
и число было 13-е и достаточно поздно

могу на всю петицию автора написать "НУ НУ".

Поработайте одновременно с Кириллицей, Умлаутами Немецкими и Турецкими, я посмотрю как Вы заговорите.
...
Рейтинг: 0 / 0
Кодировка текста (про TEncoding читал и пробовал)
    #39906121
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63, :facepalm:
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Кодировка текста (про TEncoding читал и пробовал)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]