UTF8 nach Singlebyte
-
- Beiträge: 40
- Registriert: Mi 7. Feb 2018, 10:31
- OS, Lazarus, FPC: Winux (FPC 3.x)
- CPU-Target: xxBit
UTF8 nach Singlebyte
Hi,
ich habe ein für mich großes Problem. Ich muss etwas aus einer MySqlDB lesen wo die Daten in UTF8 gespeichert sind. Ich brauche aber einen ganz "normalen" String. Nun habe ich UTF8ToSingleByte im netz gefunden. Aber leider weiß ich nicht wie man das Anwendet oder ob das die richtige Funktion ist. Es finden sich auch widersprüchliche angaben im netz die nicht gehen.
Wäre toll wenn mir jemand auf die Sprünge helfen könnte. Am liebsten natürlich mit einem ein zeiler Beispiel und welche Units ich einbinden muss.
Als Testeintrag habe ich "test – Spaß an der Sache". Wenn ich mir das in Hex ausgeben lasse ist das nur eine Zahlenkolonne. Deswegen hänge ich einen kleinen Screenshot mit dran, den man besser lesen kann. Es soll später auf Unix laufen.
Hex wäre 7465737420E2809320537061C39F20616E20646572205361636865
Vielen dank im Voraus
ich habe ein für mich großes Problem. Ich muss etwas aus einer MySqlDB lesen wo die Daten in UTF8 gespeichert sind. Ich brauche aber einen ganz "normalen" String. Nun habe ich UTF8ToSingleByte im netz gefunden. Aber leider weiß ich nicht wie man das Anwendet oder ob das die richtige Funktion ist. Es finden sich auch widersprüchliche angaben im netz die nicht gehen.
Wäre toll wenn mir jemand auf die Sprünge helfen könnte. Am liebsten natürlich mit einem ein zeiler Beispiel und welche Units ich einbinden muss.
Als Testeintrag habe ich "test – Spaß an der Sache". Wenn ich mir das in Hex ausgeben lasse ist das nur eine Zahlenkolonne. Deswegen hänge ich einen kleinen Screenshot mit dran, den man besser lesen kann. Es soll später auf Unix laufen.
Hex wäre 7465737420E2809320537061C39F20616E20646572205361636865
Vielen dank im Voraus
- Dateianhänge
-
- utf8-hex.png (2.88 KiB) 2308 mal betrachtet
Re: UTF8 nach Singlebyte
Bist du sicher, dass du das brauchst und wenn ja wozu?
Unter Lazarus ist UFT8 ein "ganz normaler String".
Man kann nun mal nicht Unicode verlustfrei "einfach so" in ein "Singlebyte" quetschen.
Umwandlungen nach anderen Codierungen bietet z.B. die Unit "LConvEncoding".
Unter Lazarus ist UFT8 ein "ganz normaler String".
Man kann nun mal nicht Unicode verlustfrei "einfach so" in ein "Singlebyte" quetschen.
Umwandlungen nach anderen Codierungen bietet z.B. die Unit "LConvEncoding".
-
- Beiträge: 40
- Registriert: Mi 7. Feb 2018, 10:31
- OS, Lazarus, FPC: Winux (FPC 3.x)
- CPU-Target: xxBit
Re: UTF8 nach Singlebyte
Hi,
die LConvEncoding habe ich drin. Wie gesagt ich komme mit dem UTF8ToSingleByte nicht zurecht. Der kann ruhig zeichen wegschmeißen, das wäre mir egal. Wichtig wären eigentlich nur die umlaute. Ich dachte das macht diese Routine.
Und ja, leider brauche ich das so. Sonst würde ich nicht schon 3 Tage suchen. Ich bin fast der meinung das man das schnell selber gemacht hätte. Aber wenn man einmal einen weg eingeschlagen hat, dann will man es auch wissen.
Ich weiß nicht was als zweiter Parameter in UTF8ToSingleByte kommt.
die LConvEncoding habe ich drin. Wie gesagt ich komme mit dem UTF8ToSingleByte nicht zurecht. Der kann ruhig zeichen wegschmeißen, das wäre mir egal. Wichtig wären eigentlich nur die umlaute. Ich dachte das macht diese Routine.
Und ja, leider brauche ich das so. Sonst würde ich nicht schon 3 Tage suchen. Ich bin fast der meinung das man das schnell selber gemacht hätte. Aber wenn man einmal einen weg eingeschlagen hat, dann will man es auch wissen.

Ich weiß nicht was als zweiter Parameter in UTF8ToSingleByte kommt.
Re: UTF8 nach Singlebyte
Aber warum?
Du musst einfach wissen, was die Ziel Codierung sein soll, dann geht auch z.B.HK12 hat geschrieben: Mi 3. Feb 2021, 14:29 Ich weiß nicht was als zweiter Parameter in UTF8ToSingleByte kommt.
UTF8ToISO_8859_1(s);
UTF8ToISO_8859_15(s);
https://de.wikipedia.org/wiki/ISO_8859-15
-
- Beiträge: 40
- Registriert: Mi 7. Feb 2018, 10:31
- OS, Lazarus, FPC: Winux (FPC 3.x)
- CPU-Target: xxBit
Re: UTF8 nach Singlebyte
Vielen vielen dank.
Dieses Feld ist der Absender Name. Wenn man dort so einen "Mist" reinschreibt kommen diverse Clients nicht mit klar. Die zeigen dann an den stellen nur ? an. z.b. Spaß wird zu Spa?
Nochmals danke.
Dieses Feld ist der Absender Name. Wenn man dort so einen "Mist" reinschreibt kommen diverse Clients nicht mit klar. Die zeigen dann an den stellen nur ? an. z.b. Spaß wird zu Spa?
Nochmals danke.
-
- Beiträge: 40
- Registriert: Mi 7. Feb 2018, 10:31
- OS, Lazarus, FPC: Winux (FPC 3.x)
- CPU-Target: xxBit
Re: UTF8 nach Singlebyte
Leider klappt es nicht. Mit meinem Beispiel String kommt folgendes raus: test - Spa? an der Sache
Ich habe mit folgends Array gemacht und fülle das in einen String. Lese ich den in einer schleife Zeichenweise aus, dann steht das auch drin.
PS.: Ich habe auch UTF8ToISO_8859_1 probiert. Das gleiche.
Ich habe mit folgends Array gemacht und fülle das in einen String. Lese ich den in einer schleife Zeichenweise aus, dann steht das auch drin.
Code: Alles auswählen
x :array[0..26] of Char=(#$74,#$65,#$73,#$74,#$20,#$E2,#$80,#$93,#$20,#$53,#$70,#$61,#$C3,#$9F,#$20,#$61,#$6E,#$20,#$64,#$65,#$72,#$20,#$53,#$61,#$63,#$68,#$65);
line:='';
for i:=Low(x) to High(x) do begin
line:=line+x[i];
end;
WriteLn(UTF8ToISO_8859_2(line));
Re: UTF8 nach Singlebyte
Wie gesagt, du musst wissen, was die Ziel Codierung sein soll.
Auf Windows vllt. UTF8ToCP1252?
Und es ist auch nicht "Mist", sondern UTF8 und das ist heute eigentlich Standard.
In Unit LazUTF8 gibt es auch noch UTFToSys oder UTF8ToConsole.
Vllt. wirst du damit glücklich. Aber Blindflug ist immer schlecht bei Codierungen.
Auf Windows vllt. UTF8ToCP1252?
Und es ist auch nicht "Mist", sondern UTF8 und das ist heute eigentlich Standard.
In Unit LazUTF8 gibt es auch noch UTFToSys oder UTF8ToConsole.
Vllt. wirst du damit glücklich. Aber Blindflug ist immer schlecht bei Codierungen.
-
- Beiträge: 40
- Registriert: Mi 7. Feb 2018, 10:31
- OS, Lazarus, FPC: Winux (FPC 3.x)
- CPU-Target: xxBit
Re: UTF8 nach Singlebyte
Nochmal danke. UTF8ToConsole klappt einwandfrei.
Netten Gruß
Netten Gruß
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: UTF8 nach Singlebyte
Hi!
Das ist nicht nur "eigentlich Standard"(Theo) -
das ist seit 20 Jahren Standard.
UTF-8 wurde 1992 "erfunden"
Da hat jemand die letzten 20 Jahre geschlafen!
Winni
Das ist nicht nur "eigentlich Standard"(Theo) -
das ist seit 20 Jahren Standard.
UTF-8 wurde 1992 "erfunden"
Da hat jemand die letzten 20 Jahre geschlafen!
Winni
-
- Beiträge: 955
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: UTF8 nach Singlebyte
Ich nehme an dir geht es um E-Mail? Dann solltest du dir auch die entsprechende Thematik durchlesen, das ist nämlich alles geregelt. Wenn du natürlich nichts angibst, dann fällt der E-Mail Client auf den kleinsten Nenner zurück.HK12 hat geschrieben: Mi 3. Feb 2021, 15:09 Dieses Feld ist der Absender Name. Wenn man dort so einen "Mist" reinschreibt kommen diverse Clients nicht mit klar. Die zeigen dann an den stellen nur ? an. z.b. Spaß wird zu Spa?
Man kann auch einfach die CodePage Funktionalität nutzen, die jeder AnsiString seit FPC 3.0.0 mit sich rumschleppt, dann ist es nämlich sogar einfach nur eine Zuweisung:theo hat geschrieben: Mi 3. Feb 2021, 14:51 Du musst einfach wissen, was die Ziel Codierung sein soll, dann geht auch z.B.
UTF8ToISO_8859_1(s);
UTF8ToISO_8859_15(s);
https://de.wikipedia.org/wiki/ISO_8859-15
Code: Alles auswählen
program tstrcnv;
uses
{$ifdef unix}
fpwidestring,
{$endif} Character;
const
CP_ISO8859_1 = 28591;
type
TString8859_1 = type AnsiString(CP_ISO8859_1);
procedure DumpHex(const aStr: RawByteString);
var
i: SizeInt;
begin
for i := 1 to Length(aStr) do begin
if (i > 1) and ((i - 1) mod 15 = 0) then
Writeln;
Write(HexStr(Ord(aStr[i]), 2), ' ');
end;
Writeln;
end;
var
sutf8: UTF8String = #$74#$65#$73#$74#$20#$E2#$80#$93#$20#$53#$70#$61#$C3#$9F#$20#$61#$6E#$20#$64#$65#$72#$20#$53#$61#$63#$68#$65;
siso: TString8859_1;
begin
Writeln('UTF8:');
DumpHex(sutf8);
{ this is where the magic happens }
siso := sutf8;
Writeln('ISO8859-1:');
DumpHex(siso);
end.
Code: Alles auswählen
UTF8:
74 65 73 74 20 C3 A2 C2 80 C2 93 20 53 70 61
C3 83 C2 9F 20 61 6E 20 64 65 72 20 53 61 63
68 65
ISO8859-1:
74 65 73 74 20 E2 80 93 20 53 70 61 C3 9F 20
61 6E 20 64 65 72 20 53 61 63 68 65
FPC Compiler Entwickler
Re: UTF8 nach Singlebyte
Sagen wir mal "Kann man auch nutzen". Für "einfach" halte ich es nicht.PascalDragon hat geschrieben: Do 4. Feb 2021, 09:37 Man kann auch einfach die CodePage Funktionalität nutzen, die jeder AnsiString seit FPC 3.0.0 mit sich rumschleppt, dann ist es nämlich sogar einfach nur eine Zuweisung:
Code: Alles auswählen
const
CP_ISO8859_1 = 28591;
type
TString8859_1 = type AnsiString(CP_ISO8859_1);
UTF8ToISO_8859_1(s) klappt ohne Verrenkungen aus dem FF.
-
- Beiträge: 40
- Registriert: Mi 7. Feb 2018, 10:31
- OS, Lazarus, FPC: Winux (FPC 3.x)
- CPU-Target: xxBit
Re: UTF8 nach Singlebyte
Jop, es geht um EMail. Sorry, da ich den Text 2x geändert habe ist das wohl raus gefallen. Das passiert wenn man nervös ist.PascalDragon hat geschrieben: Do 4. Feb 2021, 09:37 Ich nehme an dir geht es um E-Mail? Dann solltest du dir auch die entsprechende Thematik durchlesen, das ist nämlich alles geregelt. Wenn du natürlich nichts angibst, dann fällt der E-Mail Client auf den kleinsten Nenner zurück.

Versendet wird mit Synapse unter Debian. Im Moment frage ich die Mails mit Roundcube (Webinterface) ab. Dort ist halt alles im Eimer. Es geht um das Feld from:. Was ich gemerkt habe ist, wenn "normaler" Text ohne umlaute oder sowas drin ist, dann klappt es und es steht nicht From: "=?UTF-8?Q?.... usw. drin. Sondern z.b. From:"test" <mail@domain.com> drin.
Beim Feld Subject ist das egal. Da darf das mit UTF8 drin stehen.
Nun habe ich noch nicht getestet wie andere Client das genau anzeigen. Es gibt ja massenhaft.
Re: UTF8 nach Singlebyte
Hast du den richtigen Header?
z.B.
Ich würde meine Energie in das Austüfteln des richtigen Mail-Heades stecken, statt in die Umwandlung von UTF-8 in "Single Byte", dann hast du Ruhe.
z.B.
Code: Alles auswählen
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
-
- Beiträge: 40
- Registriert: Mi 7. Feb 2018, 10:31
- OS, Lazarus, FPC: Winux (FPC 3.x)
- CPU-Target: xxBit
Re: UTF8 nach Singlebyte
Jop, habe ich. Wie gesagt, vielleicht liegt es am RoundCube. Weil auch wenn ich z.b. Test äöü reinschreibe macht Synapse das UFT8 davor. Ich dachte erst das liegt an mir.
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: UTF8 nach Singlebyte
Ja oder Du schaust mal auf den Kalender, stellst fest dass wie 2021 haben und machst Alles in Utf8.
Einmal Utf8 konsequent durchgezogen und man spart sich viel Ärger mit Konvertierungen.
Einmal Utf8 konsequent durchgezogen und man spart sich viel Ärger mit Konvertierungen.