Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
Delphi XE5 Professional
|
Re: Decodierung verschiedener Character Sets
28. Jan 2010, 23:16
Das werde ich mir auch ansehen.
Ich denke, wenn ich deutsche Sender nehme, würde es reichen, die Codes zu überspringen. Aber wenn es ordentlich sein soll, muss ich die Codes auswerten.
In WinSTB habe das gefunden:
Delphi-Quellcode:
var
CyrTable: array [0..255] of char = (
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ','!','"','#','$','%','&','''','(',')','*','+',',','-','.','/',
'0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?',
'@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_',
'`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o',
'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
' ','¨',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
'À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï',
'Ð','Ñ','Ò','Ó','Ô','Õ','Ö','×','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß',
'à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï',
'ð','ñ','ò','ó','ô','õ','ö','÷','ø','ù','ú','û','ü','ý','þ','ÿ',
' ','¸',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '
);
TrnTable: array[0..31] of pointer =
( nil, @CyrTable, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil );
CharSets: array[0..31] of integer =
(
0, RUSSIAN_CHARSET, 0, 0, 0, TURKISH_CHARSET, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 );
function DVBToWinStr(str:String;Length:Integer;CodePage:Integer):String;
var i:Integer;
Transl: PChar;
begin
CodePage:=TURKISH_CHARSET;
Result:='';
Transl:=nil;
for i:=1 to Length do
begin
if Ord(str[i])=0 then break;
if Ord(str[i])<$20 then
begin
Transl:=TrnTable[Ord(str[i])];
CodePage:=CharSets[Ord(str[i])];
continue;
end;
if (Ord(str[i]) {and $7F})>=$20 then
begin
if (Transl = nil) then
result:=result+char(str[i])
else
result:=result+Transl[Ord(str[i])];
end;
end;
end;
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
|