Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Anmeldungen zum Forentreffen 2018 sind auf der Anmeldeseite möglich
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

charset/codepage

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1320
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

charset/codepage

Beitrag von Rudolf » Mo, 05. Sep 2016 9:22

Hallo,
wieder mal ein codepage Problem, bekomme in einem XML die Sonderzeichen nicht richtig decodiert. Ich verwende XB2NET, hier kann ich mit xbCPConvert() von einer Codepage in eine beliebig andere umwandeln. Im Header steht <?xml version="1.0" encoding="UTF-8"?>, also müsste die Basis UTF sein

Code: Alles auswählen

DC_LangSet(101)
SET CHARSET TO ANSI
aadd(aChar,{"Ö","Ö"})
aadd(aChar,{"ä","ä"})
aadd(aChar,{"ö","ö"})
aadd(aChar,{"ü","ü"})
aadd(aChar,{"ß","ß"})
for x := 1 to len(aChar)
     //28592     iso-8859-2     ISO 8859-2 Central European; Central European (ISO)
     //1250      windows-1250   ANSI Central European; Central European (Windows)
     //65001     UTF-8

     cOut += aChar[x,1] + "|" + aChar[x,2] + "|" + xbCPConvert(aChar[x,2],65001, 1250 )+ CRLF // in ANSI
     cOut += aChar[x,1] + "|" + aChar[x,2] + "|" + xbCPConvert(aChar[x,2],65001, 28592  )+ CRLF //
     cOut += aChar[x,1] + "|" + aChar[x,2] + "|" + xbCPConvert(aChar[x,2],1250 ,65001 )+ CRLF //
     cOut += aChar[x,1] + "|" + aChar[x,2] + "|" + xbCPConvert(aChar[x,2],28592,65001   )+ CRLF //

next x
memowrit("uml.txt",cOut)
dc_guimemoedit(cout)

Ergebnis:
Ö|Ö|
Ö|Ö|
Ö|Ö|Ă–
Ö|Ö|Ö
---------------
ä|ä|
ä|ä|
ä|ä|ä
ä|ä|ä
---------------
ö|ö|
ö|ö|
ö|ö|ö
ö|ö|Ä‚Å›
---------------
ü|ü|
ü|ü|
ü|ü|ĂĽ
ü|ü|Ăź
---------------
ß|ß|
ß|ß|
ß|ß|Ăź
ß|ß|ß
---------------

Wie komme ich zur richtigen Konvertierung ?
Grüße
Rudolf

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13811
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: charset/codepage

Beitrag von brandelh » Mo, 05. Sep 2016 9:32

Ich würde das mit meiner Funktion einlesen (memoread() könnte schon konvertieren) und mit Pablos Funktionen nach Ansi umsetzen.
Und zwar die ganze Datei auf einen Schlag !
UTF-8 ist ja zeichenabhängig 1:1, 2:1, 3:1 bis 4:1

file2str() aus Tools oder hier :arrow: http://www.xbaseforum.de/viewtopic.php? ... t=file2str

UTF8 :arrow: http://www.xbaseforum.de/viewtopic.php? ... f8#p103055
Gruß
Hubert

Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2307
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Kontaktdaten:

Re: charset/codepage

Beitrag von Wolfgang Ciriack » Mo, 05. Sep 2016 11:33

Ich setze alles um mit

Code: Alles auswählen

ConvToOemCp(cUtf8toAnsi(cxml))
wobei cUtf8toAnsi() aus ot4xb ist.
Viele Grüße
Wolfgang

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13811
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: charset/codepage

Beitrag von brandelh » Mo, 05. Sep 2016 11:42

das kommt natürlich drauf an ob die EXE in Ansi oder OEM läuft. Ich meine aber Pablo hätte eine eigene OEM Funktion ...
Gruß
Hubert

Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1320
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: charset/codepage

Beitrag von Rudolf » Mo, 05. Sep 2016 12:14

Hallo,
ich hoffe doch dass alle das gleiche (richtige) Ergebnis liefern ;-)
Grüße
Rudolf

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13811
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: charset/codepage

Beitrag von brandelh » Mo, 05. Sep 2016 13:08

Pablo hat 4 Funktionen in der OT4XB,

2 erzeugen Ansi oder Oem Strings aus Utf8:

cUtf8ToAnsi(cUtf8) -> cAnsi
cUtf8ToOem(cUtf8) -> cOem


die anderen erzeugen aus Oem oder Ansi Strings Utf8 Strings:
cAnsiToUtf8( cAnsi ) -> cUtf8
cOemToUtf8(cOem) -> cutf8


man muss nur die richtige Funktion und Richtung wählen, dazu kann man abfragen wie die EXE eingestellt ist, im obigen Quellcode war ja aber von ANSI die Rede.

Wichtig ist, dass der UTF8 String nicht mehr automatisch oder manuell geändert wird.
Ich bin mir nicht sicher, dass dort nur eindeutige Zeichen verwendet werden.
Gruß
Hubert

Antworten