charset/codepage

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

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

charset/codepage

Beitrag von Rudolf »

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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: charset/codepage

Beitrag von brandelh »

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: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: charset/codepage

Beitrag von Wolfgang Ciriack »

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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: charset/codepage

Beitrag von brandelh »

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: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: charset/codepage

Beitrag von Rudolf »

Hallo,
ich hoffe doch dass alle das gleiche (richtige) Ergebnis liefern ;-)
Grüße
Rudolf
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: charset/codepage

Beitrag von brandelh »

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