Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Коды символов


Автор: Paradox 31.10.2003, 09:25
Как можно перевести строки из виндовской кодировки в досовсую и наоборот и как узнать в какой кодировке представлен текстовый файл (приложение консольное) ?

Автор: Akella 31.10.2003, 09:53
Этот алгоритм позволяет перекодировать текст. Реализованы кодировки Windows-1251, KOI8-R, ISO-8859-5 и DOS.
Кодировка – это таблица, в которой указано, например, что символ под номером 160 - это русская буква "а", а под номером 150 – "Ц" и т. д. Кодировки различаются номерами русских букв (как располагать английские буквы договорились). Разные компьютеры в Интернете используют разные кодировки. И поэтому, когда русский текст идет по Интернету, его многократно перекодируют.
Этот алгоритм обеспечивает высокую скорость перекодирования больших объемов данных.
procedure TForm1.Button1Click(Sender: TObject);
var
code1, code2: TCode;
s: string;
c: char;
i: integer;
chars: array [char] of char;
str: array [TCode] of string;
begin
case ComboBox1.ItemIndex of
1: code1 := koi;
2: code1 := iso;
3: code1 := dos;
else code1 := win;
end;
case ComboBox2.ItemIndex of
1: code2 := koi;
2: code2 := iso;
3: code2 := dos;
else code2 := win;
end;
s := Memo1.Text;

Str[win] := 'АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя';
Str[koi] := 'юЮаАбБцЦдДеЕфФгГхХиИйЙкКлЛмМнНоОпПяЯрРсСтТуУжЖвВьЬыЫзЗшШэЭщЩчЧъЪ';
Str[iso] := 'РрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯяа№бёв?гѓдєеѕжізїијйљкњлћм?н§оўпџ';
Str[dos] := 'Ђ ?Ў‚ўѓЈ„¤…Ґ†¦‡§?Ё‰©ЉЄ‹"Њ?Ћ®?Ї?а'б'в“г”д•е–ж—з?и™йљк›лњм?нћоџп';

for c := #0 to #255 do
Chars[c] := c;

for i := 1 to Length(Str[win]) do
Chars[Str[code2][i]] := Str[code1][i];

for i := 1 to Length(s) do
s[i] := Chars[s[i]];

Memo2.Text := s;
end;


Протестируй!
Если будут ошибки сообщи!

Автор: Paradox 31.10.2003, 11:24
А как можно из командной строки считать "(двойные кавычки, а не две одинарных) таким образом, чтобы программа не думала что это пустая строка.
Командная строка имеет вид
Код
SubstText.exe D:\SubstText\test D:\SubstText\outtest " a
а ParamStr(3) возвращает a, при этом " игнорируется sad.gif

Автор: p0s0l 31.10.2003, 17:00
На самом деле " не игнорируется, а считается за часть параметра. Но т.к. у тебя нет закрывающей кавычки, то всё что идет после " будет считаться последним параметром.
Можно попробовать через GetCommandLine самому разбивать командную строку на параметры.

Автор: cot 1.11.2003, 07:11
А почему не использовать API OemToChar и CharToOem?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)