![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нужна функция перекодирования строки из win в dos [D7, WinXP]
GH@ST © (2005-03-02 10:11:00)Нашел в интернете алгоритм перекодирования..причем он фигрирует практически во всех справочниках..но там есть вот такая строка
Str[dos] := 'Ђ ЃЎ‚ўѓЈ„¤…Ґ†¦‡§€Ё‰©ЉЄ‹"Њ¬ЌЋ®ЏЇђа'б'в"г"де–ж—зи™йљк›лњмќнћоџп';
которую компилятор не пропускает..получается, что в середине из-за этих ковычек незакрытая строка...как с этим быть?
Вообще нужна просто функция..можно и другую...
Anatoly Podgoretsky (2005-03-06 13:46:00) [1]Все эти коды - это не WinDos, а КодировкаКодировка, а WinDos это CharToOem и ее писать не надо, она уже встроена в Виндоус.
Случайный гость (2005-03-06 13:31:00) [2]Я делаю так
T_vbr:=Строка ДОС
While j<=LEngth(T_vbr) do
begin
LtChar:=T_vbr[j];
if (Ord(T_vbr[j])>$7F)and(Ord(T_vbr[j])<$B0) then
ltChar:=Char(Ord(T_vbr[j])+$40);
if (Ord(T_vbr[j])>$DF)and(Ord(T_vbr[j])<$F2) then
ltChar:=Char(Ord(T_vbr[j])+$10);
if Ord(T_vbr[j])>=$F2 then
ltChar:=' ';
if Ord(T_vbr[j])=$FC then
ltChar:='№';
T_vbr[j]:=LtChar;
j:=j+1;
end;
Пока все работает в любой Винде
Юрий Зотов (2005-03-02 10:50:00) [3]> GH@ST (02.03.05 10:39) [8]
Я думаю, что для этой задачи - не просто последний, а первый и последний.
GH@ST (2005-03-02 10:39:00) [4]>Юрий Зотов ©
видимо это последний вариант..
Юрий Зотов (2005-03-02 10:38:00) [5]> GH@ST (02.03.05 10:34) [4]
Уже сказали - AnsiToOem. См. справку по API.
GH@ST (2005-03-02 10:38:00) [6]Читал там написано
народ 100% да DOS<->WIN!
но не 100% что вы подумали 866<->1251 :)
так на всяк случай...
Думкин (2005-03-02 10:37:00) [7]http://delphibase.spb.ru/?action=viewtopic&topic=strconvert
GH@ST (2005-03-02 10:34:00) [8]Да хрень какая-то получается...а есть у кого нибудь рабочая функция...?
Александр Иванов (2005-03-02 10:28:00) [9]Ты бы сначала кавычку вставить попробовал. Если не нравится кавычка, то в тексте замени ее на #39, примерно так 'Ђ ЃЎ‚ўѓЈ„¤…Ґ†¦‡§€Ё‰©ЉЄ‹"Њ¬ЌЋ®ЏЇђа'#39'б'#39'в"г"де–ж—з?и™йљк›лњмќнћоџп'
GH@ST (2005-03-02 10:24:00) [10]Вот полный текст преобразователя отесть если я туда лишнюю кавычку вставлю..символы могут сместится на один...мне же не строку с кавычкой надо, а решение.
Этот алгоритм позволяет перекодировать текст.
Реализованы кодировки 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;
Взято с сайта http://blackman.wp-club.net/
Чапаев (2005-03-02 10:15:00) [11]AnsiToOem()?
А насчёт кавычек -- читай хелп... Если в строку нужно вставить апостроф -- вставляется два апострофа.