AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Decodierung verschiedener Character Sets
Thema durchsuchen
Ansicht
Themen-Optionen

Decodierung verschiedener Character Sets

Ein Thema von Garfield · begonnen am 28. Jan 2010 · letzter Beitrag vom 29. Jan 2010
Antwort Antwort
Benutzerbild von Garfield
Garfield

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

Decodierung verschiedener Character Sets

  Alt 28. Jan 2010, 00:18
In Transport Streams sind Event Informationen (EPG) enthalten. Diese werden in verschiedenen Descriptoren angeben. Bei Texten gibt in der Regel das erste Char die Codierung des Textes an. Dazu gibt es in der ETSI EN 300 468 in Anhang A die Tabelle 3 (Seite 102):

Code:
First byte   Character code table                 Table description               Reproduced in
value                                                                               figure
0x01          ISO/IEC 8859-5 [27]                  Latin/Cyrillic alphabet         A.2
0x02          ISO/IEC 8859-6 [28]                  Latin/Arabic alphabet           A.3
0x03          ISO/IEC 8859-7 [29]                  Latin/Greek alphabet            A.4
0x04          ISO/IEC 8859-8 [30]                  Latin/Hebrew alphabet           A.5
0x05          ISO/IEC 8859-9 [31]                  Latin alphabet No. 5             A.6
0x06          ISO/IEC 8859-10 [32]                 Latin alphabet No. 6             A.7
0x07          ISO/IEC 8859-11 [33]                 Latin/Thai (draft only)         A.8
0x08          reserved for future use (see note)
0x09          ISO/IEC 8859-13 [34]                 Latin alphabet No. 7             A.9
0x0A         ISO/IEC 8859-14 [35]                 Latin alphabet No. 8 (Celtic)   A.10
0x0B         ISO/IEC 8859-15 [36]                 Latin alphabet No. 9             A.11
0x0C to 0x0F reserved for future use
0x10          ISO/IEC 8859                          See table A.4
0x11          ISO/IEC 10646 [16]                   Basic Multilingual Plane (BMP)
0x12          KSX1001-2004 [44]                    Korean Character Set
0x13          GB-2312-1980                          Simplified Chinese Character
0x14          Big5 subset of ISO/IEC 10646 [16]    Traditional Chinese
0x15          UTF-8 encoding of ISO/IEC 10646 [16] Basic Multilingual Plane (BMP)
0x16 to 0x1E reserved for future use
0x1F         Described by encoding_type_id        Described by 8 bit
                                                    encoding_type_id conveyed in
                                                    second byte of the string
In meinem deutschen Beispielstream wird die Codierung $05 verwendet. Da funktioniert die Decodierung anscheinend ohne Probleme. Einen Teil der anderen ISO 5589 Character Sets kann man vermutlich über die Delphi Fundamentals decodieren. Für die anderen müsste man wohl selbst CharMaps erstellen.

Kennt Ihr eine Alternative zu den Delphi Fundamentals, welche auch die anderen Character Sets unterstützt?

Wißt Ihr, warum bei den Unicode Character Sets die Codierung angegeben wird? Das sind doch bestimmt auch Doppelbytechar? Oder muss man ein Byte auf Grund der Codierung ergänzen?

Es wäre schön, wenn sich hier jemand damit auskennt und entsprechende Tipps geben kann.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Decodierung verschiedener Character Sets

  Alt 28. Jan 2010, 08:46
Zitat von Garfield:
Kennt Ihr eine Alternative zu den Delphi Fundamentals, welche auch die anderen Character Sets unterstützt?
http://philo.de/xml/downloads.shtml
Zitat von Garfield:
Wißt Ihr, warum bei den Unicode Character Sets die Codierung angegeben wird?
Weil es protokolltechnisch schöner ist wenn solche Bytes immer vorhanden sind auch wenn hier bei Unicode-Text dies anders auch erkannt werden könnte.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

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

Re: Decodierung verschiedener Character Sets

  Alt 28. Jan 2010, 15:33
Sieht so aus, als hätte OpenXML alles, was ich brauche. Danke.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

Re: Decodierung verschiedener Character Sets

  Alt 28. Jan 2010, 15:38
MSDN-Library durchsuchenMultiByteToWideChar und MSDN-Library durchsuchenWideCharToMultiByte
Falls die Listen der CharSets/CodePages nicht ausreichen ... in meiner himXML.pas existiert eine Tabelle, mit den passenden CodePages für diese Funktionen (einfach mal nach sowas wie "ISO-8859-5" suchen)

Du brauchst dann praktisch nur noch 'ne eigene Tabelle ala FirstByte(Byte)+CodePage(Word).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

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

Re: Decodierung verschiedener Character Sets

  Alt 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
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

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

Re: Decodierung verschiedener Character Sets

  Alt 29. Jan 2010, 13:27
Die Unit CodecUtilsWin32 in Open XML basiert auf der Unit cUnicodeCodecs der Delphi Fundamentals.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz