Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 12.04.2008, 12:53 Titel: Umlaute auf Grafik-SCREEN |
|
|
Hallo,
ich möchte ein FreeBasic-Programm gerne auch unter Linux (Debian 4) ablaufen lassen. Das Compilieren und Ausführen klappt soweit auch ohne Probleme, aber die Umlaute werden im SCREEN-Fenster leider falsch dargestellt:
Das Seltsame ist, dass die Zeichen über INKEY abgefragt wurden. Das heißt, es ist nicht irgendein anderer Zeichensatz aus einem Editor.
Code: | 'Der Code ist nur hier im Forumeingabefeld kurz als Beispiel
'geschrieben worden und enthält möglicherweise Tippfehler.
DIM AS STRING Test, Taste
SCREEN 12
Test = ""
DO
Taste = INKEY
IF Taste <> "" Then
If Taste = CHR(27) THEN
Exit Do
Else
Test += Taste
End If
End If
Loop
PRINT Test
SLEEP |
So eingegebene Umlaute würden falsch ausgegeben (wie oben). Was kann man da machen? Gibt es unter Linux auch Zeichensatzkonvertierungsroutinen wie CharToOEM / OEMToChar unter Windows?
Viele Grüße!
Sebastian _________________
Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 12.04.2008, 14:45 Titel: |
|
|
Hallo!
HerbertSoftware hat Folgendes geschrieben: | Unter Debian gibt es den Befehl:
dpkg-reconfigure locales
Prüfe ob dort ein
de_DE@euro ISO-8859-15
de_DE ISO-8859-1
angekreuzt ist. |
Beides war nicht angekreuzt. Das hab ich jetzt geändert und de_DE als Standard ausgewählt, aber leider hat das an dem Umlautproblem nichts geändert.
Zitat: | Bitte gib mal in der Kommandozeile in der Du es aufrufst folgendes ein:
echo $TERM |
xterm
Zitat: | Weiters wäre evtl. auch ein
echo $SHELL
hilfreich. |
/bin/bash
Viele Grüße!
Sebastian _________________
Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 12.04.2008, 14:48 Titel: |
|
|
Lass dir doch mal die ASCII-Codes von den Umlauten bei Inkey ausgeben. FB hat ja im Screenmodus schließlich seine eigene Codepage. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 12.04.2008, 17:10 Titel: |
|
|
Frag am besten im englischen Forum nach, weil mir kommt das spanisch vor.. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4594 Wohnort: ~/
|
Verfasst am: 13.04.2008, 10:11 Titel: |
|
|
Wenn du die Lösung hast, sag Bescheid - ich habe das Problem auch schon von Anfang an ... (habe es bisher umgangen, indem ich ae, oe und ue verwende ) _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 13.04.2008, 14:05 Titel: |
|
|
Hallo,
ich habe das Problem nun wie folgt gelöst:
Zunächst ist mir aufgefallen, dass die Codes, die eingegeben werden, anscheinend Windows-artig zugeordnet sind (ANSI). Will man aber Text ausgeben, muss dies im ASCII-Zeichensatz geschehen. Also habe ich eine Tabelle erstellt, die jedem Zeichen den zugehörigen ASCII-Code zuordnet: http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=557
Nun muss man vor dem Ausgeben des Texts (siehe Beispiel ganz am Anfang) noch die Buchstaben des Strings Test immer durch den über die Tabelle zugeordneten ASCII-Code ersetzen. Dann werden auch eingegebene Umlaute richtig angezeigt.
Beispiel:
Code: | #include "tabelle-aus-nopaste.bas"
Function Zeichensatzkorrektur (ByVal Text As String) As String)
Dim As String temp=""
Dim As Integer i
Dim As UByte bs
FOR i = 0 TO LEN(Text)-1
bs = Text[i]
temp += CHR(ZTab(bs))
Next i
RETURN temp
End Function
DIM AS STRING Test, Taste
SCREEN 12
ZeichensatzkorrekturLinuxInit '<= Tabelle initialisieren
Test = ""
DO
Taste = INKEY
IF Taste <> "" Then
If Taste = CHR(27) THEN
Exit Do
Else
Test += Taste
End If
End If
Loop
PRINT Zeichensatzkorrektur(Test)
SLEEP |
Viele Grüße!
Sebastian _________________
Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 13.04.2008, 14:13 Titel: |
|
|
jetzt könntest du natürlich noch code sparen, indem du das so machst...
Code: |
'zuerst die regelmäßigen zuordnungen
for i as integer = 0 to 255
ZTab(i)=i
next
'jetzt die unregelmäßigen zuordnungen
ZTab(x)=y
|
_________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 13.04.2008, 14:22 Titel: |
|
|
Diese Tabelle habe ich automatisch erzeugen lassen (jaja, ich hab sie nicht mühselig manuell zusammengestellt... ), sodass es für den Aufwand unerheblich ist, wie viele Zeichen regelmäßig sind. Da sie auch nur rund 5kB groß ist, glaub ich, dass ich diese Optimierungen nicht noch machen muss. _________________
Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 13.04.2008, 14:28 Titel: |
|
|
Damit passt es aber schon mal nicht mehr in ein 4k-Intro
Code verkleinern ist IMMER wichtig XD _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4594 Wohnort: ~/
|
Verfasst am: 13.04.2008, 16:46 Titel: |
|
|
In diesem Fall reicht ja ein
Code: | for i as integer = 0 to 127
ZTab(i)=i
next
ZTab(128)=95
[...] |
Spart Code ohne überflüssige Rechenschritte.
Das § und das € stimmen bei mir noch nicht, aber ich muss sowieso mal schauen wie/ob ich es füt UTF8 umbauen kann.
edit:
unter Western 15 enthält bei mir das €-Zeichen. Aber ich finde keine Ausgabe für § _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 13.04.2008, 18:20 Titel: |
|
|
Einmal generell gefragt: Ob im FreeBasic-Entwicklungsteam nicht bereits Bestrebungen im Gang sind, künftig alles als Unicode zu handhaben? Scheint aus meiner Sicht langfristig sinnvoller als weiss ich wie lange noch den DOS-Zeichensatz als Rückwärtskompatibilitätsrelikt mitzuschleppen...
Wäre evtl. ein sinnvoller "Feature Request"! _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
Klößchn 1x verwarnt
Anmeldungsdatum: 22.03.2008 Beiträge: 77 Wohnort: Donauwörth
|
Verfasst am: 14.04.2008, 14:09 Titel: |
|
|
dreael hat Folgendes geschrieben: | Wäre evtl. ein sinnvoller "Feature Request"! |
Soll das heißen, man kann auch Funktionen anfordern? Das ist ja cool :]
Aber ist Unicode nicht durch W- (wide) Strings bereits integriert? |
|
Nach oben |
|
|
|