Einzelnen Beitrag anzeigen

Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Decodierung verschiedener Character Sets

  Alt 28. Jan 2010, 22: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
  Mit Zitat antworten Zitat