AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unicode String nach Hex mit angabe der Codepage

Ein Thema von jarib · begonnen am 29. Jun 2011 · letzter Beitrag vom 30. Jun 2011
Antwort Antwort
Seite 1 von 2  1 2      
jarib

Registriert seit: 23. Aug 2007
Ort: Neumünster
7 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Unicode String nach Hex mit angabe der Codepage

  Alt 29. Jun 2011, 16:35
Delphi-Version: XE
Hallo zusammen,

für das folgendes Problem benötige ich einen kleinen Denkanstoß!

Ich möchte einen Unicode/Utf8 String welchen ich aus einer XML Datei lese in
die entsprechende Unicode Zeichennummer (hexadezimal) wandeln unter Berücksichtigung einer beliebigen Codepage.

Folgendes habe ich bereits ausprobiert aber aus einem mir unbekannten Grund kommt trotz
Wechsel der Codepage immer das gleiche Ergebnis bei mir heraus.

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  stTmp   : String;
  bbytes  : TBytes;
begin
  stTmp:= 'Zeile';
  bbytes:= TEncoding.GetEncoding(1251).GetBytes(stTmp);
end;
Ergebnis: $5A, $65, $69, $6C, $65 (90, 108, 105, 108, 101)
Ich erwarte allerdings für die Codepage 1251 (Kyrillisch): $043B, $0438, $043D, $0438, $044F

Hintergrund der ganzen Geschichte ist, dass ich die Ressourcen Datei *_DRC.rc vom Delphi Translation Manager
nachbauen möchte. Unter dem Delphi XE werden nämlich die Übersetzungen der Sprachen (ungleich Latin) in der
Stringtable der RC Datei mit der Unicode Zeichenummer in Hex hinterlegt.

Bin dankbar für jeden Hinweis!

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Unicode String nach Hex mit angabe der Codepage

  Alt 29. Jun 2011, 16:48
Unicode/UTF-16 hat keine Codepage ... OK, eigentlich stimmt das nicht, da dieses virtuelle Codepage 1200 bekommen hat.
UTF8 hat zwar auch eine Codepage, aber ich weiß jetzt dennoch nicht wo du die Codepage haben willst?

> UTF-8 nach Unicode und dann nach Hex? (keine Codepage nötig)

> UTF-8 nach Unicode, dann nach ANSI mit einer Codepage und zum Schluß nach HEX?

PS: 'Zeile' sieht in jeder Codepage gleich aus, da die unteren 128 Zeichen überall gleich sind.
Aber vom Prinzip her, dürfte dein Code schon korrekt sein.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (29. Jun 2011 um 16:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Unicode String nach Hex mit angabe der Codepage

  Alt 29. Jun 2011, 17:09
Naja "codepage" wird ja oft genug falsch verwendet.
Hier die bekannten Unicode "Codepages"

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Unicode String nach Hex mit angabe der Codepage

  Alt 29. Jun 2011, 17:29
Das sind aber keine Codepages?
Sind doch nur die Codeblöcke, so wie man die Zeichen im Unicode verteilt hat.

ANSI, UTF-8, UTF-7, UTF-16 usw. sind quasi "nur" Komprimierungsverfahren, welche den großen Zeichenvorat des UCS beschränken und/oder komprimieren.
Und die Codepage gibt z.B. im ANSI den Zeichenvorat an, welcher dort reincodiert wurde/werden kann.
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 Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#5

AW: Unicode String nach Hex mit angabe der Codepage

  Alt 29. Jun 2011, 18:19
Ich erwarte allerdings für die Codepage 1251 (Kyrillisch): $043B, $0438, $043D, $0438, $044F
Da TBytes als array of Byte (8 Bit) deklariert ist, können da unmöglich Werte wie $043B (16 Bit) drinstehen.

Wenn ich aber mal einen string definiere als

Delphi-Quellcode:
const
  sTest: string = #$043B#$0438#$043D#$0438#$044F;
und mir diesen String anzeigen lasse, dann kommen da kyrillische Buchstaben raus, die laut Google Translate sowas wie "Linie" bedeuten.

Du glaubst aber nicht, daß TEncoding eine Übersetzung des Strings liefert?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Unicode String nach Hex mit angabe der Codepage

  Alt 29. Jun 2011, 18:38
Jupp, eine Ansi-Codepage 1251 wird immer nur ein Byte pro Zeichen haben, außer bei einigen Multibyte-Codepages.

Aber auch Unicode kann man in einem ByteArray ablegen ... immer 2 Byte pro Zeichen.
PS: Ord(MyString[Zeichenindex]) , bei einem Unicodestring würde auch noch gehen.
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 Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#7

AW: Unicode String nach Hex mit angabe der Codepage

  Alt 29. Jun 2011, 18:42
Jupp, eine Ansi-Codepage 1251 wird immer nur ein Byte pro Zeichen haben, außer bei einigen Multibyte-Codepages.

Aber auch Unicode kann man in einem ByteArray ablegen ... immer 2 Byte pro Zeichen.
PS: Ord(MyString[Zeichenindex]) , bei einem Unicodestring würde auch noch gehen.
Wie gesagt: die Hex-Sequenz, die er erwartet, entspricht der kyrillischen Übersetzung von "Zeile"...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Unicode String nach Hex mit angabe der Codepage

  Alt 29. Jun 2011, 18:50
Und die Codepage gibt z.B. im ANSI den Zeichenvorat an, welcher dort reincodiert wurde/werden kann.
Nachdem HP und Microsoft mir leicht unterschiedliche Definitionen von Codepage untergejubelt haben, interpretiere ich "codepage" als die Zeichensammlung, die von 8Bit-Werten erzeugt werden kann.
Und wenn ich für die Interpretation "killefit" benötige, dann benutz' ich es auch.

Und wenn ich UTF-8 richtig interpretiere, dann ist UTF-8 ein 8Bit Zeichensatz, bei dem bestimmte "Escape-Werte" es ermöglichen mehr als die "üblichen 256 Zeichen" darzustellen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jarib

Registriert seit: 23. Aug 2007
Ort: Neumünster
7 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

AW: Unicode String nach Hex mit angabe der Codepage

  Alt 29. Jun 2011, 20:43
Danke erstmal für die Antworten!

Meinen Beispiel String (Zeile) möchte ich unter einer X beliebigen Sprache
ausgeben. Dazu benötige ich doch die Angabe einer Codepage, damit meine
ich die Angabe einer sprachspezifischen Zeichentabelle.

Die Konvertierung von Utf-8 -> Unicode -> Hex unter der gleichen Sprache ist
Problemlos möglich. Das sehe ich auch so!

Aber sobald ich von Latin auf Kyrillisch oder Chinesisch oder sonst eine Sprache
wechsel benötige ich doch die Angabe einer Codepage oder meinetwegen auch Zeichentabelle.

Die Codepage unter der z.B. Deutsch zu finden ist, sollte die 1252 sein und
für Kyrillisch die 1251. (Nach Microsoft wie p80286 dies bereits erwähnt hat)

Die Codepage 1200 ist mir ehrlich gesagt unbekannt.

Zurück zu meiner Frage ...

Wenn ich mir meinen Codesnipsel noch mal genauer anschaue, hat Raabe wohl recht
das in eine TByte keine 16 Bit rein passen. Hm ...

Mein Ansatz muss falsch sein. Ich bin davon ausgegangen das der Translation Manager das deutsche Wort als Ausgang benutzt um die Hex Sequenz für die Übersetzung zu erzeugen.
Das kann ja nicht funktionieren!

Ich gehe eher mal davon aus das der Translation Manager die Übersetzung benutzt
um daraus die Hex Sequenz zu erzeugen.

Allerdings frage ich mich wie bekomme ich über
TEncoding ... GetBytes einen 16 Bit großen Rückgabewert. Welcher für Kyrillisch
Codepage verwendet wird.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#10

AW: Unicode String nach Hex mit angabe der Codepage

  Alt 29. Jun 2011, 21:13
Ich verstehe immer noch nicht, warum du bei einem Unicode-Programm mit den Code-Pages rumhantieren willst. Wenn du die russische Übersetzung für "Zeile" brauchst, dann schreib doch einfach "линия". Dabei ist das vollkommen egal, ob das kyrillische Wort in einer XML-Datei mit UTF8-Codierung steht. Jede brauchbare XML-Umsetzung gibt dir den String in Unicode zurück bzw. läßt dich ihn als Unicode schreiben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:38 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