Hello everyone!
I'm still testing various things in XSharp and XIDE before attempting to migrate my applications from VO to XSharp.
Now I have some Problems with german "Umlaute" (äöü ÄÜÖ ß). I have a .dbf database with items like "Hähnchenschnitzel" and so on.
In VO I have no Problems with code like this:
oTB := TextBox{, "Test", oDBServer:Fieldget("Bez")}
oTB:Show()
The Textbox shows "Hähnchenschnitzel" with the correct "ä".
In XSharp the Textbox shows some kind of special character instead of the "ä"
I've tried using SetAnsi(FALSE), SetAnsi(true), Ansi2OEM(), OEM2Ansi() but nothing works. With Ansi2OEM() the small "äöü" are displayed correctly, but the large "ÄÖÜ" are still displayed as special charcters.
How can I get XSharp to work properly with these characters?
I have included an example .dbf in the attachments. For example please look at the record numbers 10 / 11 / 12 / 25 / 85.
Regards
Kai
German Umlaute üöä ÜÖÄ
German Umlaute üöä ÜÖÄ
- Attachments
-
- artikel.zip
- (29.78 KiB) Downloaded 117 times
German Umlaute üöä ÜÖÄ
Hi Kai,
do you have any samples of code how do you access your DBF tables?
Wolfgang
P.S. I'm using several X# applications that access the same DBFs as VO applications - in different formats: VOOGUI, WPF, Windows Forms, Windows services
do you have any samples of code how do you access your DBF tables?
Wolfgang
P.S. I'm using several X# applications that access the same DBFs as VO applications - in different formats: VOOGUI, WPF, Windows Forms, Windows services
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
German Umlaute üöä ÜÖÄ
Hi Kai,
I forgot: what are the language settings of your VO application?
Wolfgang
I forgot: what are the language settings of your VO application?
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
German Umlaute üöä ÜÖÄ
Hi Wolfgang!
Here the xSharp-code. It uses the artikel.dbf which i attached in the first post.
[STAThread];
FUNCTION Start() AS INT
LOCAL oXApp AS XApp
TRY
oXApp := XApp{}
oXApp:Start()
CATCH oException AS Exception
ErrorDialog(oException)
END TRY
RETURN 0
CLASS XApp INHERIT App
METHOD Start()
LOCAL oDBServer AS DBServer
LOCAL oTB AS TextBox
SetCentury(TRUE)
SetDateCountry(GERMAN)
SetExclusive(FALSE)
SetSoftSeek(FALSE)
SetDeleted(TRUE)
RddSetDefault("DBFCDX")
SetAnsi(FALSE)
SetAmPm(FALSE)
oDBServer := DBServer{"c:xsharpartikel.dbf", DBSHARED, FALSE, "DBFCDX"}
oDBServer:GoTo(83)
oTB := TextBox{, "Artikel", AllTrim(oDBServer:FieldGet("bBez1"))}
oTB:Show()
oDBServer:Close()
SELF:Quit()
RETURN SELF
Here the xSharp-code. It uses the artikel.dbf which i attached in the first post.
[STAThread];
FUNCTION Start() AS INT
LOCAL oXApp AS XApp
TRY
oXApp := XApp{}
oXApp:Start()
CATCH oException AS Exception
ErrorDialog(oException)
END TRY
RETURN 0
CLASS XApp INHERIT App
METHOD Start()
LOCAL oDBServer AS DBServer
LOCAL oTB AS TextBox
SetCentury(TRUE)
SetDateCountry(GERMAN)
SetExclusive(FALSE)
SetSoftSeek(FALSE)
SetDeleted(TRUE)
RddSetDefault("DBFCDX")
SetAnsi(FALSE)
SetAmPm(FALSE)
oDBServer := DBServer{"c:xsharpartikel.dbf", DBSHARED, FALSE, "DBFCDX"}
oDBServer:GoTo(83)
oTB := TextBox{, "Artikel", AllTrim(oDBServer:FieldGet("bBez1"))}
oTB:Show()
oDBServer:Close()
SELF:Quit()
RETURN SELF
German Umlaute üöä ÜÖÄ
Hi Kai,
there is something strange with your DBF: even my VO Dictionary Editor does not shows the correct umlaut data. I have to lookup the header.
Wolfgang
there is something strange with your DBF: even my VO Dictionary Editor does not shows the correct umlaut data. I have to lookup the header.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
German Umlaute üöä ÜÖÄ
Hi Wolfgang!
My VO application shows everything as it should be. I have attached an image. This VO-Application uses a simple DataBrowser. The artikel.dbf was created by DBFileSpec:create()
The VO App:Start() -Method uses the following commands, everything else like DBServer and so an is VO-standard without modifications:
SetCentury(TRUE)
SetDateCountry(GERMAN)
SetExclusive(FALSE)
SetSoftSeek(FALSE)
SetEpoch(1930)
SetDeleted(TRUE)
RddSetDefault("DBFCDX")
SetAnsi(FALSE)
SetAmPm(FALSE)
Regards
Kai
My VO application shows everything as it should be. I have attached an image. This VO-Application uses a simple DataBrowser. The artikel.dbf was created by DBFileSpec:create()
The VO App:Start() -Method uses the following commands, everything else like DBServer and so an is VO-standard without modifications:
SetCentury(TRUE)
SetDateCountry(GERMAN)
SetExclusive(FALSE)
SetSoftSeek(FALSE)
SetEpoch(1930)
SetDeleted(TRUE)
RddSetDefault("DBFCDX")
SetAnsi(FALSE)
SetAmPm(FALSE)
Regards
Kai
- Attachments
-
- artikel.jpg (93.01 KiB) Viewed 880 times
German Umlaute üöä ÜÖÄ
Hi Kai, Wolfgang,
Wolfgang, the dbf is created with SetAnsi() off, so you need to use a SetAnsi(FALSE) in VO, in order to open it correctly.
But indeed, the same thing does not work correctly in X#. I suspect there's some issue with the recognition of the codepage of the dbf, or there's something iffy in the dbf handling in X# with SetAnsi(FALSE), will open a report for Robert to look more closely into it. Thanks for the report!
Wolfgang, the dbf is created with SetAnsi() off, so you need to use a SetAnsi(FALSE) in VO, in order to open it correctly.
But indeed, the same thing does not work correctly in X#. I suspect there's some issue with the recognition of the codepage of the dbf, or there's something iffy in the dbf handling in X# with SetAnsi(FALSE), will open a report for Robert to look more closely into it. Thanks for the report!
Chris Pyrgas
XSharp Development Team
chris(at)xsharp.eu
XSharp Development Team
chris(at)xsharp.eu
German Umlaute üöä ÜÖÄ
Guys,
Ah, sorry, my previous comment was wrong, SetAnsi(FALSE) should be used in VO only when creating the dbf, in order to create it in OEM format, but SetAnsi(TRUE) should still be used to read it (or otherwise use Oem2Ansi() manually to convert the string read from OEM/DOS format(codepage) to windows readable ANSI).
So I think Wolfgang is right, there seems to be a problem with the dbf, having the wrong codepage in its header, or format of the data. Kai, how did you create this dbf? Can you also post an aef of a small VO sampleapp showing how you are opening and showing this dbf?
Ah, sorry, my previous comment was wrong, SetAnsi(FALSE) should be used in VO only when creating the dbf, in order to create it in OEM format, but SetAnsi(TRUE) should still be used to read it (or otherwise use Oem2Ansi() manually to convert the string read from OEM/DOS format(codepage) to windows readable ANSI).
So I think Wolfgang is right, there seems to be a problem with the dbf, having the wrong codepage in its header, or format of the data. Kai, how did you create this dbf? Can you also post an aef of a small VO sampleapp showing how you are opening and showing this dbf?
Chris Pyrgas
XSharp Development Team
chris(at)xsharp.eu
XSharp Development Team
chris(at)xsharp.eu
German Umlaute üöä ÜÖÄ
Hi Chris,
the strange thing is than when using the code Kai posted earlier and adapting it to VO it shows the correct output.
I have pasted this code into a standard VO Console application.
Wolfgang
the strange thing is than when using the code Kai posted earlier and adapting it to VO it shows the correct output.
Code: Select all
function DisplayDBF() as void
LOCAL oDBServer AS DBServer
LOCAL oTB AS TextBox
SetCentury(TRUE)
SetDateCountry(GERMAN)
SetExclusive(FALSE)
SetSoftSeek(FALSE)
SetDeleted(TRUE)
RddSetDefault("DBFCDX")
SetAnsi(FALSE)
SetAmPm(FALSE)
oDBServer := DBServer{"c:tempartikel.dbf", DBSHARED, FALSE, "DBFCDX"}
oDBServer:GoTo(83)
oTB := TextBox{, "Artikel", AllTrim(oDBServer:FieldGet("bBez1"))}
oTB:Show()
oDBServer:Close()
RETURN
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
German Umlaute üöä ÜÖÄ
Hi Chris,
following the previous message: the sample application uses SetAnsi( false ), so no conversion is done.
If the DBF is created to use OEM characters, and opened with SetAnsi( false ), then the data is written as ANSI, regardless of the charset that is used in the DBF header. Any application that respects this header will show wrong data.
The problem could be that X# probably with SetAnsi( true ) does not makes the conversion from the ANSI (that should be used when SetAnsi() is false) to Unicode (that is used internally in .NET).
Wolfgang
following the previous message: the sample application uses SetAnsi( false ), so no conversion is done.
If the DBF is created to use OEM characters, and opened with SetAnsi( false ), then the data is written as ANSI, regardless of the charset that is used in the DBF header. Any application that respects this header will show wrong data.
The problem could be that X# probably with SetAnsi( true ) does not makes the conversion from the ANSI (that should be used when SetAnsi() is false) to Unicode (that is used internally in .NET).
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it