Seite 1 von 1

Stringkonvertierung DOS-Latin-1 --> UTF8

Verfasst: 09.11.2012 11:14
von frankmannb
Hallo Leute,

ich habe folgendes Problem. Ich möchte eine Datei einlesen die in DOS-Latin-1 geschrieben wurde. Die Datei wird eingelesen und nach Änderung wieder ausgegeben. Als Ausgabe soll aber zur weiteren Verwendung UTF8 verwendet werden. Gibt es hierzu einen Befehl bei PureBasic der mir es erlaubt einen eingelesenen String in das UTF-Format umzuwandlen?

Vielen Dank für eure Hilfe
Frank

Re: Stringkonvertierung DOS-Latin-1 --> UTF8

Verfasst: 09.11.2012 11:29
von ts-soft
Denn String kannst Du aber nur in einem Speicher halten!

Code: Alles auswählen

Procedure OEM2UTF8(String.s)
  Static *mem
  If OemToChar_(String, String)
    *mem = AllocateMemory(StringByteLength(String, #PB_UTF8) + 1)
    PokeS(*mem, String, -1, #PB_UTF8)
    ProcedureReturn *mem
  EndIf
EndProcedure
Wahrscheinlich willst Du aber den DOS-String lediglich in eine Datei schreiben, dafür benötigst Du nur
OemToChar_(String, String) und beim schreiben dann UTF-8 als Flag angeben (siehe Hilfe).

Gruß
Thomas

Re: Stringkonvertierung DOS-Latin-1 --> UTF8

Verfasst: 09.11.2012 11:31
von helpy
... oder selbst schreiben mit Hilfe der "Codepage 850 Mapping bei Unicode.org"

Re: Stringkonvertierung DOS-Latin-1 --> UTF8

Verfasst: 09.11.2012 11:40
von frankmannb
Hallo Thomas,

Danke :D genau das war es, was ich gesucht habe.

Schön das es euch gibt.

Bis denne und nochmals Vielen Dank
ts-soft hat geschrieben:Denn String kannst Du aber nur in einem Speicher halten!

Code: Alles auswählen

Procedure OEM2UTF8(String.s)
  Static *mem
  If OemToChar_(String, String)
    *mem = AllocateMemory(StringByteLength(String, #PB_UTF8) + 1)
    PokeS(*mem, String, -1, #PB_UTF8)
    ProcedureReturn *mem
  EndIf
EndProcedure
Wahrscheinlich willst Du aber den DOS-String lediglich in eine Datei schreiben, dafür benötigst Du nur
OemToChar_(String, String) und beim schreiben dann UTF-8 als Flag angeben (siehe Hilfe).

Gruß
Thomas

Re: Stringkonvertierung DOS-Latin-1 --> UTF8

Verfasst: 09.11.2012 12:26
von helpy
Was passiert, wenn auf einem PC als OEM Zeichensatz nicht die CodePage 850 (DOS Latin-1) eingestellt ist?

Dann wird wohl OemToChar fehlerhafte Ergebnisse liefern.