Seite 1 von 1
OemToChar_
Verfasst: 20.07.2011 22:12
von Fordey_ra
Habe eine kleine Procedure geschrieben um Umlaute von einer alten QBasic Datei
mit Umlaute einzulesen. Dieses klappt auch fast bei allem Umlauten. Außer manchmal .
z.B. den Namen KRÜGER wird nicht richtig gewandelt. Mit einem Hey-Editor konnte ich herausfinden das für das Ü der Hex-Wert 9A steht.
Herauskommt das -->KRèGER<
Code: Alles auswählen
Procedure.s UmlautzuWin(Umlaut.s)
OemToChar_(Umlaut,Umlaut)
Debug Umlaut
ProcedureReturn Umlaut
EndProcedure
Wie kann das seien ?
__________________________________________________
Code-Tags hinzugefügt
20.07.2011
RSBasic
Re: OemToChar_
Verfasst: 20.07.2011 22:21
von RSBasic
Sicher, dass du OemToChar verwenden möchtest und nicht CharToOem?
Vielleicht hilft dir dieser Code weiter:
Code: Alles auswählen
EnableExplicit
Define Output$
Procedure.s CharToOem(String.s)
CharToOem_(@String, @String)
ProcedureReturn String
EndProcedure
Procedure.s OemToChar(String.s)
OemToChar_(@String, @String)
ProcedureReturn String
EndProcedure
If OpenConsole()
Output$ = CharToOem("KRÜGER")
PrintN(Output$)
Debug OemToChar(Output$)
Input()
CloseConsole()
EndIf
Re: OemToChar_
Verfasst: 20.07.2011 22:41
von Fordey_ra
KLappt nicht .
Interresant das Jürgen richtig übersetzt wird.
Hex Zahl in Datei 81 scheint aber Kleinschrift zu seien.
Re: OemToChar_
Verfasst: 09.08.2011 09:52
von Shardik
Deine im ersten Posting angeführte Prozedur funktioniert doch perfekt!
Zum Testen habe ich lediglich den ASCII-Code für ein großes Ü ($9A)
oder ein kleines ü ($81) an Deine Prozedur übergeben und er wird
korrekt in den von Windows verwendeten ANSI-Code umgesetzt:
Code: Alles auswählen
Procedure.s UmlautzuWin(Umlaut.s)
OemToChar_(Umlaut,Umlaut)
Debug Umlaut
ProcedureReturn Umlaut
EndProcedure
UmlautzuWin("KR" + Chr($9A) + "GER") ; Gibt "KRÜGER" aus
UmlautzuWin("J" + Chr($81) + "rgen") ; Gibt "Jürgen" aus
Dies funktioniert so allerdings nicht, wenn Du unter Compiler-Optionen
die Option "Unicode-Executable erstellen" aktiviert hast, da in diesem Fall
für den ersten und zweiten Parameter von OemToChar() nicht die gleiche
Variable verwendet werden darf:
MSDN hat geschrieben:If the OemToChar function is being used as an ANSI function, the string can be translated in place by setting the lpszDst parameter to the same address as the lpszSrc parameter. This cannot be done if OemToChar is being used as a wide-character function.