ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > Konvertieren: iso-8859-1 | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
18.06.2007, 21:11 Uhr Ralf27 Posts: 2779 Nutzer |
Gibt es eigentlich eine Möglichkeit sowas über das System zu konvertieren? Oder muß man es doch selbst über Tabellen lösen? Also Konvertieren zum "normalen" ansehn. -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
18.06.2007, 21:57 Uhr _PAB_ Posts: 3016 Nutzer |
Mit iconv läßt sich das lösen, entweder nativ auf Linux o.ä. oder zB. über PHP: http://www.gnu.org/software/libiconv/ http://www.php.net/iconv [ - Antworten - Zitieren - Direktlink - ] |
18.06.2007, 22:10 Uhr Ralf27 Posts: 2779 Nutzer |
Ich wollte das eigentlich in einem Programm lösen, denn dieses Problem hab ich gerade in meinem Programm. -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
19.06.2007, 01:33 Uhr cgutjahr Posts: 2783 [Administrator] |
Zitat:Nein. Zitat:Ein etwas genauere Problembeschreibung wäre hilfreich Die codesets.library konvertiert zwischen diversen Code-Tabellen (ISO-8859-#?, AmigaPL, Amiga-1251, KOI8-R, UTF-8): http://aminet.net/package/util/libs/codesets -- Gutjahrs Amiga Seiten [ - Antworten - Zitieren - Direktlink - ] |
19.06.2007, 12:39 Uhr Holger Posts: 8116 Nutzer |
Die AOS4 diskfont.library bietet die Möglichkeit via ObtainCharsetInfo Konvertierungstabellen für 8Bit-single-byte Charsets abzufragen. Allerdings erscheint mir die codesets.library da auch die besser Wahl zu sein. Läuft auf AOS3.x, AOS4, MOS gleichermaßen und unterstützt halt auch die anderen Charsets. mfg -- [ Dieser Beitrag wurde von Holger am 19.06.2007 um 12:40 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
19.06.2007, 21:08 Uhr Ralf27 Posts: 2779 Nutzer |
Also die Codeset.lib sieht recht gut aus. Ich hab mir mal die Beschreibung durchgelesen(nunja, nur die entsprechenden Befehle die ich brauchen werden und das sind genau zwei ) und somit sieht die Sache für mich recht einfach aus. Aber dennoch, wie immer, gibt es da für mich ein kleines Problem: Ich schreib ja leider als noch in MaxonBasic und muß also erst mal ein paar Dateien konvertieren. Eine bmap-Datei konnte ich bereits aus der .fd-Datei konvertieren. Eine .bd-Datei ist auch kein großes Problem, allerdings macht mir die .bc-Datei mit den Konstanten doch große Probleme. Ich hab die entsprechende Stelle mit den Konstanten bei der codeset.lib gefunden (include/library/codesets.h), allerdings komme ich da nicht so ganz klar was da die eigentlich Werte dastellen sollen : Z.b. code:#define CODESETSLIB_TAG(n) ((ULONG)0xfec901f4+(n)) #define CSA_Base CODESETSLIB_TAG(0) #define CSA_SourceLen CODESETSLIB_TAG(1) #define CSA_Source CODESETSLIB_TAG(2) #define CSA_Dest CODESETSLIB_TAG(3) #define CSA_DestLen CODESETSLIB_TAG(4) #define CSA_DestHook CODESETSLIB_TAG(5) #define CSA_DestLenPtr CODESETSLIB_TAG(6) #define CSA_SourceCodeset CODESETSLIB_TAG(7) #define CSA_Pool CODESETSLIB_TAG(8) #define CSA_PoolSem CODESETSLIB_TAG(9) #define CSA_AllocIfNeeded CODESETSLIB_TAG(10) #define CSA_Save CODESETSLIB_TAG(11) #define CSA_FallbackToDefault CODESETSLIB_TAG(12) #define CSA_DestCodeset CODESETSLIB_TAG(13) #define CSA_CodesetDir CODESETSLIB_TAG(14) #define CSA_CodesetFile CODESETSLIB_TAG(15) #define CSA_CodesetList CODESETSLIB_TAG(16) #define CSA_FreeCodesets CODESETSLIB_TAG(17) #define CSA_CodesetFamily CODESETSLIB_TAG(18) #define CSA_ErrPtr CODESETSLIB_TAG(19) #define CSA_B64SourceString CODESETSLIB_TAG(20) #define CSA_B64SourceLen CODESETSLIB_TAG(21) #define CSA_B64SourceFile CODESETSLIB_TAG(22) #define CSA_B64DestPtr CODESETSLIB_TAG(23) #define CSA_B64DestFile CODESETSLIB_TAG(24) #define CSA_B64MaxLineLen CODESETSLIB_TAG(25) #define CSA_B64Unix CODESETSLIB_TAG(26) #define CSA_B64FLG_NtCheckErr CODESETSLIB_TAG(27) Ich nehm mal an das ganz oben eine Funktion steht und das ich dann einfach die Zahlen in denn Klammeren zu der Zahl in der Funktion addieren muß und damit hab ich dann denn eigentlich Wert der Konstanten. Frage: Wieso macht man das denn so kompliziert? -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
19.06.2007, 22:14 Uhr Ralf27 Posts: 2779 Nutzer |
Hab mal eben alles(vermutlich richtig) nach bmap, bh und bc konvertiert. Aber leider scheint jetzt mein Compiler (MBasic) die Befehle nicht zu mögen, bzw. deren Anzahl der Parameter. z.b. geht folgendes nicht:code:srcCodeset&=CodesetsFindA&(SADD("ISO-8859-1"+CHR$(0)),NULL&) dstCodeset&=CodesetsFindA&(SADD("Amiga-1251"+CHR$(0)),NULL&) Er meint, es wären die falsche Anzahl an Parametern, aber irgendwie sollte das doch so stimmen, wenn ich die Doku verstanden habe. Die Lib ist auch mit declare function CodeSetsFindA& library gekennzeichnet. Ne Idee? Achja, wenn ich Spaßhalber einen parameter dazu gebe (z.b. 0), dann läuft der Compiler weiter... ja, mir ist schon klar... murkscompiler... jo. -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
20.06.2007, 09:45 Uhr Holger Posts: 8116 Nutzer |
Zitat: Jeder Programmierer nimmt nach und nach die Denkweise der Programmiersprache an, mit der er ständig arbeitet. Wenn diese also total verdreht und unnötig kompliziert ist, wird er mit der Zeit auch immer verdrehteren und unnötig verkomplizierten Code schreiben. Außerdem ist #define CSA_B64Unix CODESETSLIB_TAG(26) immerhin ein Zeichen kürzer als #define CSA_B64Unix (CODESETSLIB_TAG+26), also die sonst übliche Variante. Was die Anzahl der Parameter angeht: die nimmt MBasic aus der .bmap Datei, die Du aus der .fd Datei generiert hast. Wenn die nicht stimmt, ist die .bmap Datei fehlerhaft, entweder weil die .fd Datei schon falsche Informationen enthält (was ich hier aber nicht sehe), oder weil das Konvertieren schief gegangen ist. Dass MBasic bei der Allerweltskonstellation "zwei Parameter, zwei Adressregister" einen Fehler haben soll, kann ich mir eigentlich nicht vorstellen. Andererseits...wir reden über MBasic... mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
20.06.2007, 10:41 Uhr whose Posts: 2156 Nutzer |
Zitat: Ich denke, hier liegt das Problem eher bei der Makro-Wut von Unix-Codern und weniger bei der Programmiersprache an sich. Wer Teile eines oftmals in C entwickelten Programms mit (meist auch noch mehreren unterschiedlichen) Makro-Prozessoren erstellen läßt, kennts halt nicht anders und macht das dann überall so, auch da, wo es nicht angebracht ist. Willkommen in der schönen Welt der Ports und des Formalismus. @Ralf: Schau Dir mal z.B. die Definition von Window-Tags an und vergleiche das mal mit der, die Du hier nicht so ganz verstanden hast. Im Groben ist das hier der gleiche "Mechanismus", nur aus Schreibfaulheit etwas verkürzt und mit Makro-Parametern "gewürzt". Das ist also keine Funktion im herkömmlichen Sinn da ganz am Anfang sondern ein Präprozessor-Makro mit Parameter, aus dem dann die weiteren Tag-Definitionen entstehen. Setz einfach in Gedanken bei jedem Tag statt "CODESETSLIB_TAG" "((ULONG)0xfec901f4+(n))" ein und bau in die "Rechnung" den Parameter aus der Klammer hinter CODESETSLIB_TAG ein und Du solltest verstehen, was da passiert. Nichts anderes macht der Präprozessor des C-Compilers auch, und zwar bei jedem Auftreten von CODESETSLIB_TAG im Quelltext, egal wo (!). Da ersetzt er dann z.B. den Text CODESETSLIB_TAG(1) mit dem Text ((ULONG)0xfec901f4 + (1)), also simplem C-Code. Grüße -- --- µA1 PPC 750GX-800 A4000 PPC 604e-233 [ - Antworten - Zitieren - Direktlink - ] |
20.06.2007, 20:08 Uhr Ralf27 Posts: 2779 Nutzer |
Das mit den Konstanten wurde mir erst klar, als ich wärend des Eintrag schreiben war. Ich denke mal, das ich das richtig konvertiert habe. Die Sache mit der bmap macht mir da jetzt mehr Kopfzerbrechen. Denn in der bmap scheint wohl der Hase im Pfeffer zu liegen. Die scheint wohl fehlerhaft zu sein. Muß ich mir später mal ansehn. Wäre schön wenn ich diese Lib in MaxonBasic aus auch nutzen könnte und eigentlich müßte es doch auch laufen. Eigentlich... -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
23.06.2007, 21:48 Uhr Ralf27 Posts: 2779 Nutzer |
Hab mir eben nochmal das Problem angesehn, komme aber leider nicht weiter. Ich vermute auch das die bmap-Datei fehlerhaft ist, aber ich hab sie so gewandelt wie immer (mit einem Tool das bei MaxonBasic dabei war), aber ich kann sonst keine andere Fehlerquelle finde. Ich war eben kurz auf der Suche im Aminet, da gibt es ja auch ein Tool dafür. Aber leider weis ich nicht mehr nach was man da genau suchen muß. Die Suche nach bmap bringt nix bzw. fd wohl nicht das richtige (C oder ASM ...) Mit welchem Tool kann ich noch .fd nach .bmap konvertieren? Ich hoffe das es wirklich daran liegt. Ich würde schon gerne diese Lib mitnutzen können... -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
23.06.2007, 22:46 Uhr NoImag Posts: 1050 Nutzer |
@Ralf27: Bei AmigaBASIC ist ein BASIC-Programm mit dem Namen "ConvertFD" dabei, das bmap-Dateien erstellt. Aber wahrscheinlich ist es dasselbe Programm, was auch bei MaxonBASIC dabei ist. Tschüß [ - Antworten - Zitieren - Direktlink - ] |
24.06.2007, 07:54 Uhr Holger Posts: 8116 Nutzer |
fd2pragma dürfte wohl zu dem Thema das Programm mit der aktivsten Pflege sein. Siehe http://aminet.net/package/dev/misc/fd2pragma Im Readme steht auch Support für BMAP drin. Habe ich selber aber nie getestet. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
24.06.2007, 10:23 Uhr Ralf27 Posts: 2779 Nutzer |
Zja, die bmap war wirklich falsch erstellt. Das Programm bei MBasic ist wohl nicht ganz ausgereift. Ok, jetzt stimmen die Anzahl der Parameter und der Compiler läuft durch. Aber: code:srcCodeset&=CodesetsFindA&(SADD("ISO-8859-1"+CHR$(0)),NULL&) dstCodeset&=CodesetsFindA&(SADD("Amiga-1251"+CHR$(0)),NULL&) bei scrCodeSet& bekomme ich eine glatte NULL geliefert, dstCodeSet& scheint zu funktionieren. Was könnte denn das nun schon wieder sein? -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
24.06.2007, 11:14 Uhr Ralf27 Posts: 2779 Nutzer |
Hab eben denn Fehler gefunden. War ein peinlicher Fehler meinerseits: Variable falsch geschrieben... scr.. src... Mir ist klar das andere Compiler das wohl bemerkt hätten... Aber, jetzt läufts! *freu* -- http://www.alternativercomputerclub.de.vu [ Dieser Beitrag wurde von Ralf27 am 24.06.2007 um 11:15 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
24.06.2007, 13:23 Uhr Ralf27 Posts: 2779 Nutzer |
Ähm, zu früh gefreut: Der Compilter läuft durch ohne Fehler, ok. Das Programm läuft durch, auch ohne Fehler, ok. Aber der Text ist nach dem konvertieren noch der gleich? Ich hatte vor Text von ISO-8859-1 nach Amiga-1251 zu konvertieren. Aber nicht nur eine Zeile, sondern gleich ein paar kb mit CodeSetsConvertStrA(): code:--... ohne Anfang mit Libs, etc. scrCodeset&=CodesetsFindA&(SADD("ISO-8859-1"+CHR$(0)),NULL&) dstCodeset&=CodesetsFindA&(SADD("Amiga-1251"+CHR$(0)),NULL&) IF scrCodeset&=0 OR dstCodeset&=0 THEN PRINT"Problem beim Codeset" ELSE TAGLIST tagsl&,_ CSA_SourceCodeset&, scrCodeset&,_ CSA_DestCodeset&, dstCodeset&,_ CSA_Source&, SADD(text$),_ CSA_Len&, LEN(text$),_ TAG_DONE& dst&=CodesetsConvertStrA&(tagsl&) IF dst& THEN PRINT PEEK$(dst&) ELSE PRINT "Fehler!!" END IF PRINT "Programm Ende" Ende: IF dst& THEN CodesetsFreeA dst&, NULL& http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
24.06.2007, 15:20 Uhr Holger Posts: 8116 Nutzer |
Zitat: *kopfkratz* Was für ein Encoding soll dieses "Amiga-1251" denn sein? Das Encoding des Amigas war seit Urzeiten auf "ISO-LATIN-1" aka "ISO-8859-1" festgelegt. Mit AOS3.9 hat H&P das "ISO-LATIN-9" aka "ISO-8859-15" als "Standard" gesetzt und mit AOS4 finden diverse Zeichenkodierungen Einzug, aber von "Amiga-1251" hab ich bislang nichts gehört. Es gibt ein "Windows-1252" auch als CP1252 bekannt, das ziemlich verbreitet ist, allerdings sind die Unterschiede zwischen Latin 1, Latin 9 und CP1252 ziemlich gering. Sie betreffen nur diese Zeichen. Wenn die Konvertierung nichts sichtbares bewirkt, dann vielleicht, weil keine betroffenen Zeichen im Text enthalten sind? mfg -- Good coders do not comment. What was hard to write should be hard to read too. Edit:Link auf Wikipedia gesetzt, weil das Forum neuerdings noch schlechter mit Sonderzeichen umgeht. [ Dieser Beitrag wurde von Holger am 24.06.2007 um 15:26 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
24.06.2007, 16:36 Uhr thomas Posts: 7718 Nutzer |
Zitat: Google ist dein Freund Zitat: Was willst du denn da konvertieren ? Hast du dir die beiden Tabellen mal angesehen ? Die ersten 192 Zeichen sind identisch und die restlichen 64 sind disjunkt (die Zeichen der einen Tabelle sind in der anderen nicht enthalten und umgekehrt), da kann man nichts konvertieren. Ein Zeichen kann nur von einem Codeset in ein anderes konvertiert werden, wenn es in beiden Tabellen enthalten ist. Wenn es aber in der Zieltabelle gar nicht vorkommt, in was soll es denn dann konvertiert werden ? Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
24.06.2007, 19:29 Uhr Ralf27 Posts: 2779 Nutzer |
Hm, ich bin jetzt gelindegesagt etwas baff, denn ich hab mir die Tabellen gar nicht angesehn. Ich hab nur gesehn das der Text mit Steuerzeichen angezeigt wird und im Header ENNCODING=ISO-8859-1 steht. Mit Steuerzeichen meine ich z.b. code:oder& # 252 ; code:(hab eben gesehn das auch diese Zeichen übersetz werden, hab deswegen jetzt Leerzeichen eingefügt)& # 223 ; In einem Beispiel der codesets.library finde ich z.b. auch folgendes: code:EXAMPLE To convert an ISO-8859-1 encoded string 'src' into an Amiga-1251 equivalent 'dst' string: -- cut here -- STRPTR src, dst; struct codeset *srcCodeset, *dstCodeset; srcCodeset = CodesetsFindA("ISO-8859-1", NULL); dstCodeset = CodesetsFindA("Amiga-1251", NULL); if((dst = CodesetsConvertStr(CSA_SourceCodeset, srcCodeset, CSA_DestCodeset, dstCodeset, CSA_Source, src, TAG_DONE))) { .... CodesetsFreeA(dst, NULL); } -- cut here -- Aber wenn der Code nicht die Steuerzeichen konvertiert, dann muß ich das Problem wohl doch anderst angehn. Bzw. mit der Hand konvertieren?!? -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
25.06.2007, 23:00 Uhr Ralf27 Posts: 2779 Nutzer |
Ich konvertiere das jetzt mit der Hand. Mir ist aufgefallen das die Werte ASCII-Werte sind, die man einfach durch den ASCII-Buchstaben ersetzen muß. War eine relativ einfache Routine. Hoffe aber auch, da sich damit auch nicht wieder ein Bockmist gebaut habe. -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
26.06.2007, 10:16 Uhr Holger Posts: 8116 Nutzer |
Zitat:Aua. Wo sind denn da Steuerzeichen? Ich seh da nur normale, druckbare Zeichen. So wie sie da stehen, stellen sie Character Entities dar, sofern sie in einer Html oder XML Datei stehe, das hat aber wirklich überhaupt nichts mit Character Encodings oder Steuerzeichen zu tun. Die Zahl zwischen Raute und Semikolon ist als Unicode-Codepoint zu interpretieren, wenn man Html oder Xml Dateien verarbeitet. Siehe http://de.selfhtml.org/html/referenz/zeichen.htm mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
26.06.2007, 20:47 Uhr Ralf27 Posts: 2779 Nutzer |
@Holger: Danke, das wußte ich nicht. Soweit bin ich in Sachen HTML nie eingestiegen. Dachte halt, das wäre beim Encoding inbegriffen. -- http://www.alternativercomputerclub.de.vu [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > Konvertieren: iso-8859-1 | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |