Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Datei im UTF-8 Format ohne BOM?
Gehe zu Seite Zurück  1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 834
Wohnort: Ruhrpott

BeitragVerfasst am: 10.12.2017, 20:25    Titel: Antworten mit Zitat

Konsolenfenster oder Editor macht keinen Unterschied. FB benutzt intern ASCII.
Code:
#Include Once "windows.bi"
#Include Once "utf_conv.bi"

Function UTF(s As String) As String
   'wandelt Sonderzeichen vom ascii- ins utf8-Format
   Dim As String sUTF
   Dim As Integer numberOfBytes
   
   sUTF = String(Len(s) * 2, " ")
   CharToUTF(UTF_ENCOD_UTF8, StrPtr(s), Len(s), StrPtr(sUTF), @numberOfBytes)
   Return Left(sUTF, numberOfBytes)
End Function

Function AsciiToAnsi(text As String) As String
   'wandelt Sonderzeichen vom ascii- ins ansi-Format
   Dim As String g
   g = text
   CharToOem(g,g)
   Return g
End Function

Dim As String text = "Drü Chünüsün müt düm Küntrübüs"
Print text
Print UTF(text)
Print AsciiToAnsi(text)

ScreenRes 500, 300, 32
Print text
Print UTF(text)
Print AsciiToAnsi(text)

Open ExePath + "\test3.trf" For Output As #1
Print #1, UTF(text); 'abspeichern im UTF8-Format ohne ANSI und ohne BOM
Close 1

Sleep

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 83

BeitragVerfasst am: 10.12.2017, 20:34    Titel: Antworten mit Zitat

Zitat:
ich öffne die EXE-Datei und gebe dann mittels einer Input-Routine den Text ein.


Input_Routine über Console (DOS-Fenster)?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 959
Wohnort: Niederbayern

BeitragVerfasst am: 10.12.2017, 20:41    Titel: Antworten mit Zitat

HorstD hat Folgendes geschrieben:
Zitat:
ich öffne die EXE-Datei und gebe dann mittels einer Input-Routine den Text ein.


Input_Routine über Console (DOS-Fenster)?
Ich habe in meinem Programm "Select Case" drin! Damit wähle ich die Buchstaben/Zeichen aus. Das Fenster wurde mit "Screenres 640, 320, 32" erstellt!

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 905
Wohnort: Austria

BeitragVerfasst am: 11.12.2017, 01:38    Titel: Antworten mit Zitat

Wie grindstonde schon wiederholt gesagt hat: die Eingabefunktionen von FB unterstützen kein UTF-8, du musst den Text manuell in UTF-8 konvertieren und dann direkt so in die Datei schreiben (also die Datei asl Binärdatei öffnen und KEIN Encoding angeben).
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4200
Wohnort: ~/

BeitragVerfasst am: 11.12.2017, 15:34    Titel: Antworten mit Zitat

Code:
screenres 640, 320, 32
dim as string myUTF8string, myANSIstring, key
cls

print "Gib deinen Text ein: ";
do
  key = inkey
  select case asc(key)
    case 13
      exit do
    case 32 to 127           ' ASCII
      myANSIstring &= key
      myUTF8string &= key
      print key;
    case 132                 ' ä
      myANSIstring &= key
      myUTF8string &= chr(195, 164)
      print key;
    case 148                 ' ö
      myANSIstring &= key
      myUTF8string &= chr(195, 182)
      print key;
    case 129                 ' ü
      myANSIstring &= key
      myUTF8string &= chr(195, 188)
      print key;
    case 142                 ' Ä
      myANSIstring &= key
      myUTF8string &= chr(195, 132)
      print key;
    case 153                 ' Ö
      myANSIstring &= key
      myUTF8string &= chr(195, 150)
      print key;
    case 154                 ' Ü
      myANSIstring &= key
      myUTF8string &= chr(195, 156)
      print key;
    case 225                 ' ß
      myANSIstring &= key
      myUTF8string &= chr(195, 159)
      print key;
  end select
loop

print
print "UTF-8-String: "; myUTF8string
getkey

Keinesfalls optimal, weil zum einen eine doppelte Speicherung stattfindet (die Ausgabe innerhalb des FB-Fensters läuft ja über eine ANSI-Codierung) und weil auch das Löschen des letzten Zeichens (Backspace) in UTF-8 aufwendiger ist. Wahrscheinlich ist es sinnvoller, erst nur im ANSI zu arbeiten und erst vor dem Speichern umzuwandeln.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 83

BeitragVerfasst am: 11.12.2017, 17:59    Titel: Antworten mit Zitat

Zitat:
Da könnte ich doch ja gleich so speichern:

Code:

Open ExePath + "\test.trf" For Output As #1
Print #1, text
Close


Versuch's mal so:

Code:

Declare Function OEM2UTF8(TXT as String) as String

...
...  Dein Code
...

Open ExePath + "\test.trf" For Output As #1
Print #1, OEM2UTF8(text)
Close

...
... Dein Code
...


Function OEM2UTF8(TXT As String) As String
    '  Nur für ÄÖÜäöüß
    Dim t1 as string
    Dim i as integer
    Dim p as integer
    dim l as integer
    l = Len(TXT)
    t1 = Space$(l*2)
    For i = 0 To l-1
        '  Print t[i]
        Select Case txt[i]
            Case Is < 128: t1[p] = TXT[i]: p = p+1
            Case 142: t1[p] = 195: t1[p+1] = 132: p = p+2  '  Ä
            case 153: t1[p] = 195: t1[p+1] = 150: p = p+2  '  Ö
            Case 154: t1[p] = 195: t1[p+1] = 156: p = p+2  '  Ü
            Case 225: t1[p] = 195: t1[p+1] = 159: p = p+2  '  ß
            Case 132: t1[p] = 195: t1[p+1] = 164: p = p+2  '  ä
            case 148: t1[p] = 195: t1[p+1] = 182: p = p+2  '  ö
            case 129: t1[p] = 195: t1[p+1] = 188: p = p+2  '  ü
            Case Else
                t1[p] = 63 : p = p+1
        End Select
    Next
    Function = Left(t1,p)
End Function


Zum Testen:
Code:

Declare Function OEM2UTF8(TXT as String) as String

Dim t As String

't="ABC-ÄÖÜ-äöü-ß"
t = "ABC-"+Chr(142,153,154,45,132,148,129,45,225)

Open "d:\#fb\fb-oem2utf8.txt" For Output As #1  '<-- Pfad anpassen
   ' Print #1, t
    Print #1,OEM2UTF8(t)
close   
Function OEM2UTF8(TXT As String) As String
    '  Nur für ÄÖÜäöüß
    Dim t1 as string
    Dim i as integer
    Dim p as integer
    dim l as integer
    l = Len(TXT)
    t1 = Space$(l*2)
    For i = 0 To l-1
        '  Print t[i]
        Select Case txt[i]
            Case Is < 128: t1[p] = TXT[i]: p = p+1
            Case 142: t1[p] = 195: t1[p+1] = 132: p = p+2  '  Ä
            case 153: t1[p] = 195: t1[p+1] = 150: p = p+2  '  Ö
            Case 154: t1[p] = 195: t1[p+1] = 156: p = p+2  '  Ü
            Case 225: t1[p] = 195: t1[p+1] = 159: p = p+2  '  ß
            Case 132: t1[p] = 195: t1[p+1] = 164: p = p+2  '  ä
            case 148: t1[p] = 195: t1[p+1] = 182: p = p+2  '  ö
            case 129: t1[p] = 195: t1[p+1] = 188: p = p+2  '  ü
            Case Else
                t1[p] = 63 : p = p+1
        End Select
    Next
    Function = Left(t1,p)
End Function
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2457
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 12.12.2017, 23:58    Titel: Antworten mit Zitat

Nur als Hinweis: Derartige Case-Statements und nur gerade auf Umlaute beschränkt ist nicht gerade die optimale Umsetzungsart. An dieser Stelle wäre eine Array-Konstante besser, wo die jeweilige Codeposition passend abgebildert wird.

Kleine Anleitung: Von FreeBasic wissen wir, dass der Zeichensatz der Codepage 437 (=MS-DOS klassisch) entspricht. Am besten also eine Textdatei generieren mit diesen Zeichen, diese beispielsweise unter Linux mit
Code:
recode ibm437..utf-8 datei.txt

umwandeln. Nun braucht es lediglich noch eine Routine, welche dieses Array generiert.

Fürs Ganze sonst einmal ein sehr einfaches Hilfsprogramm kreiert:

http://beilagen.dreael.ch/QB/CodeGenCp437toUTF8.bas

Wenn alles richtig gemacht wurde, wird ein
Code:
Dim tbl(128 to ...) As String => { !"\195\135", !"\195\188", !"\195\169", !"\195\162", _
!"\195\164", !"\195\160", !"\195\165", !"\195\167", !"\195\170", !"\195\171", _
!"\195\168", !"\195\175", !"\195\174", !"\195\172", !"\195\132", !"\195\133", _
!"\195\137", !"\195\166", !"\195\134", !"\195\180", !"\195\182", !"\195\178", _
!"\195\187", !"\195\185", !"\195\191", !"\195\150", !"\195\156", !"\194\162", _
!"\194\163", !"\194\165", !"\226\130\167", !"\198\146", !"\195\161", !"\195\173", _
!"\195\179", !"\195\186", !"\195\177", !"\195\145", !"\194\170", !"\194\186", _
!"\194\191", !"\226\140\144", !"\194\172", !"\194\189", !"\194\188", !"\194\161", _
!"\194\171", !"\194\187", !"\226\150\145", !"\226\150\146", !"\226\150\147", !"\226\148\130", _
!"\226\148\164", !"\226\149\161", !"\226\149\162", !"\226\149\150", !"\226\149\149", !"\226\149\163", _
!"\226\149\145", !"\226\149\151", !"\226\149\157", !"\226\149\156", !"\226\149\155", !"\226\148\144", _
!"\226\148\148", !"\226\148\180", !"\226\148\172", !"\226\148\156", !"\226\148\128", !"\226\148\188", _
!"\226\149\158", !"\226\149\159", !"\226\149\154", !"\226\149\148", !"\226\149\169", !"\226\149\166", _
!"\226\149\160", !"\226\149\144", !"\226\149\172", !"\226\149\167", !"\226\149\168", !"\226\149\164", _
!"\226\149\165", !"\226\149\153", !"\226\149\152", !"\226\149\146", !"\226\149\147", !"\226\149\171", _
!"\226\149\170", !"\226\148\152", !"\226\148\140", !"\226\150\136", !"\226\150\132", !"\226\150\140", _
!"\226\150\144", !"\226\150\128", !"\206\177", !"\195\159", !"\206\147", !"\207\128", _
!"\206\163", !"\207\131", !"\194\181", !"\207\132", !"\206\166", !"\206\152", _
!"\206\169", !"\206\180", !"\226\136\158", !"\207\134", !"\206\181", !"\226\136\169", _
!"\226\137\161", !"\194\177", !"\226\137\165", !"\226\137\164", !"\226\140\160", !"\226\140\161", _
!"\195\183", !"\226\137\136", !"\194\176", !"\194\183", !"\226\128\162", !"\226\136\154", _
!"\226\129\191", !"\194\178", !"\226\150\160", !"\194\160" }

generiert. Damit ist auch der Franzose glücklich. :-)
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 959
Wohnort: Niederbayern

BeitragVerfasst am: 13.12.2017, 23:04    Titel: Antworten mit Zitat

dreael hat Folgendes geschrieben:
Nur als Hinweis: Derartige Case-Statements und nur gerade auf Umlaute beschränkt ist nicht gerade die optimale Umsetzungsart. An dieser Stelle wäre eine Array-Konstante besser, wo die jeweilige Codeposition passend abgebildert wird.

Kleine Anleitung: Von FreeBasic wissen wir, dass der Zeichensatz der Codepage 437 (=MS-DOS klassisch) entspricht. Am besten also eine Textdatei generieren mit diesen Zeichen, diese beispielsweise unter Linux mit
Code:
recode ibm437..utf-8 datei.txt

umwandeln. Nun braucht es lediglich noch eine Routine, welche dieses Array generiert.

Fürs Ganze sonst einmal ein sehr einfaches Hilfsprogramm kreiert:

http://beilagen.dreael.ch/QB/CodeGenCp437toUTF8.bas

Wenn alles richtig gemacht wurde, wird ein
Code:
Dim tbl(128 to ...) As String => { !"\195\135", !"\195\188", !"\195\169", !"\195\162", _
!"\195\164", !"\195\160", !"\195\165", !"\195\167", !"\195\170", !"\195\171", _
!"\195\168", !"\195\175", !"\195\174", !"\195\172", !"\195\132", !"\195\133", _
!"\195\137", !"\195\166", !"\195\134", !"\195\180", !"\195\182", !"\195\178", _
!"\195\187", !"\195\185", !"\195\191", !"\195\150", !"\195\156", !"\194\162", _
!"\194\163", !"\194\165", !"\226\130\167", !"\198\146", !"\195\161", !"\195\173", _
!"\195\179", !"\195\186", !"\195\177", !"\195\145", !"\194\170", !"\194\186", _
!"\194\191", !"\226\140\144", !"\194\172", !"\194\189", !"\194\188", !"\194\161", _
!"\194\171", !"\194\187", !"\226\150\145", !"\226\150\146", !"\226\150\147", !"\226\148\130", _
!"\226\148\164", !"\226\149\161", !"\226\149\162", !"\226\149\150", !"\226\149\149", !"\226\149\163", _
!"\226\149\145", !"\226\149\151", !"\226\149\157", !"\226\149\156", !"\226\149\155", !"\226\148\144", _
!"\226\148\148", !"\226\148\180", !"\226\148\172", !"\226\148\156", !"\226\148\128", !"\226\148\188", _
!"\226\149\158", !"\226\149\159", !"\226\149\154", !"\226\149\148", !"\226\149\169", !"\226\149\166", _
!"\226\149\160", !"\226\149\144", !"\226\149\172", !"\226\149\167", !"\226\149\168", !"\226\149\164", _
!"\226\149\165", !"\226\149\153", !"\226\149\152", !"\226\149\146", !"\226\149\147", !"\226\149\171", _
!"\226\149\170", !"\226\148\152", !"\226\148\140", !"\226\150\136", !"\226\150\132", !"\226\150\140", _
!"\226\150\144", !"\226\150\128", !"\206\177", !"\195\159", !"\206\147", !"\207\128", _
!"\206\163", !"\207\131", !"\194\181", !"\207\132", !"\206\166", !"\206\152", _
!"\206\169", !"\206\180", !"\226\136\158", !"\207\134", !"\206\181", !"\226\136\169", _
!"\226\137\161", !"\194\177", !"\226\137\165", !"\226\137\164", !"\226\140\160", !"\226\140\161", _
!"\195\183", !"\226\137\136", !"\194\176", !"\194\183", !"\226\128\162", !"\226\136\154", _
!"\226\129\191", !"\194\178", !"\226\150\160", !"\194\160" }

generiert. Damit ist auch der Franzose glücklich. lächeln
Was ist denn das??? Da komme ich jetzt nicht mehr mit. Mit den haufen Beispielen, weiß ich jetzt wirklich nicht mehr, was davon am besten ist bzw. funktioniert?

Wegen:
Zitat:
Damit ist auch der Franzose glücklich. lächeln


Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4200
Wohnort: ~/

BeitragVerfasst am: 13.12.2017, 23:38    Titel: Antworten mit Zitat

Nun, dreael hat ganz einfach einen Vorschlag für alle OEM-Zeichen. Es kann ja schließlich sein, dass du auch Zeichen wie é, ò oder â benötigst.

Zitat:
Mit den haufen Beispielen, weiß ich jetzt wirklich nicht mehr, was davon am besten ist bzw. funktioniert?

Willkommen in der Welt des Programmierers. lächeln
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 834
Wohnort: Ruhrpott

BeitragVerfasst am: 16.12.2017, 00:37    Titel: Antworten mit Zitat

ALWIM hat Folgendes geschrieben:
Mit den haufen Beispielen, weiß ich jetzt wirklich nicht mehr, was davon am besten ist bzw. funktioniert?
Ich empfehle die Verwendung der utf_conv.bi. Diese Bibliothek ist seit Jahren Bestandteil des FB - Compilers, weshalb man getrost davon ausgehen kann, daß die Implementation komplett und fehlerfrei ist.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4200
Wohnort: ~/

BeitragVerfasst am: 16.12.2017, 01:48    Titel: Antworten mit Zitat

utf_conv.bi wandelt allerdings nicht zwischen OEM und Unicode um, sondern zwischen einem UTF-String und (W)STRING.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 959
Wohnort: Niederbayern

BeitragVerfasst am: 18.12.2017, 00:44    Titel: Antworten mit Zitat

Vielen herzlichen Dank für die Antworten!
Mir ist da jetzt eine Idee gekommen:

Ich verwende ja lediglich die Buchstaben Ä, ä, Ö, ö, Ü, ü sowie ß
Wenn ich die jetzt weg lasse und die Datei ganz normal speichere, müsste ich doch eigentlich nichts umwandeln oder? Die Buchstaben Ä, Ö Ü, ... müssen letztendlich sowieso umgewandelt werden. Also Ä -> ae, ß -> ss, ö -> oe und ü -> ue.
Sollte ich diese Buchstaben in meinem Programm zulassen, müsste ich diese vor dem speichern erstmal umwandeln! Lasse ich sie nicht zu, dann brauche ich gar nichts umwandeln und kann direkt so alles abspeichern. Jetzt muss ich nur noch schauen, wie ich aus "Ä" ein "ae" oder aus "ß" ein "ss" ect. machen kann.

Ich speichere also dann so ab:

Code:
OPEN "Test.trf" FOR OUTPUT AS #f

Sollte ich falsch liegen, korrigiert mich bitte.

Wie funktioniert das Beispiel von Dreal? Wie kann ich es anwenden? So etwas habe ich noch nie gesehen bisher.

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4200
Wohnort: ~/

BeitragVerfasst am: 18.12.2017, 01:15    Titel: Antworten mit Zitat

Solange du reine ASCII-Zeichen verwendest, brauchst du dir wegen der Speicherung keine Sorgen machen. Bei ASCII-Zeichen ist die UTF-8-Speicherung identisch.

dreael hat lediglich alle möglichen Umwandlungswerte in einem Array gespeichert. Umwandeln kannst du z. B.
Code:
SCREENRES 800, 600
DIM AS INTEGER oem = 225  ' ß
PRINT CHR(oem)            ' Ausgabe des ß im Fenster
PRINT tbl(oem)            ' Ausgabe des zugehörigen UTF-8-Strings
GETKEY

_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 834
Wohnort: Ruhrpott

BeitragVerfasst am: 18.12.2017, 18:49    Titel: Antworten mit Zitat

ALWIM hat Folgendes geschrieben:
Jetzt muss ich nur noch schauen, wie ich aus "Ä" ein "ae" oder aus "ß" ein "ss" ect. machen kann.
Ganz einfach:
Code:
Function umwandeln (ByVal text As String) As String
   Dim As Integer x, y
   Dim As String umw(..., 1) = {{"Ä","Ae"}, {"ä","ae"}, _
                                {"Ö","Oe"}, {"ö","oe"}, _
                                {"Ü","Ue"}, {"ü","ue"}, _
                                {"ß","ss"}}
   
   For y = 0 To UBound(umw)
      Do While InStr(text, umw(y, 0))
         x = InStr(text, umw(y, 0))
         text = Left(text, x - 1) + umw(y, 1) + Mid(text, x + 1)
      Loop
   Next
   Return text
End Function


Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 959
Wohnort: Niederbayern

BeitragVerfasst am: 19.12.2017, 03:47    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
ALWIM hat Folgendes geschrieben:
Jetzt muss ich nur noch schauen, wie ich aus "Ä" ein "ae" oder aus "ß" ein "ss" ect. machen kann.
Ganz einfach:
Code:
Function umwandeln (ByVal text As String) As String
   Dim As Integer x, y
   Dim As String umw(..., 1) = {{"Ä","Ae"}, {"ä","ae"}, _
                                {"Ö","Oe"}, {"ö","oe"}, _
                                {"Ü","Ue"}, {"ü","ue"}, _
                                {"ß","ss"}}
   
   For y = 0 To UBound(umw)
      Do While InStr(text, umw(y, 0))
         x = InStr(text, umw(y, 0))
         text = Left(text, x - 1) + umw(y, 1) + Mid(text, x + 1)
      Loop
   Next
   Return text
End Function


Gruß
grindstone
Das wollte ich jetzt nicht haben! Das bringe ich selber auch noch hin. Egal, nun steht es da... Kann man noch um den ein oder anderen Buchstaben erweitern! Es gibt auch solche Buchstaben:

Zitat:
é, à, û, ô, ...


Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 19.12.2017, 15:39    Titel: Antworten mit Zitat

Zitat:
Das bringe ich selber auch noch hin.

Wenn du das hinbekommen hättest, hättest du auch die Konvertierung von ANSI/OEM nach UTF-8 selbst hinbekommen. Hinterher zu sagen dass man das selbt hinbekommen hätte kann jeder tun. Zunge rausstrecken
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 834
Wohnort: Ruhrpott

BeitragVerfasst am: 19.12.2017, 20:35    Titel: Antworten mit Zitat

Vor allem verstehe ich nicht, warum du (ALWIM) dich so gegen die Verwendung der utf_conv.bi - Routinen sträubst. Da ist doch schon alles komplett drin, und sie sind Bestandteil der RTLIB, also jener statischen Bibliothek, die jede vom FB - Compiler erzeugte .exe - Datei sowieso automatisch mitbekommt.

Gruß
grindstone

EDIT:
Im englischen Forum ist zum Thema UTF 8 gerade ein Projekt in der Entwicklung, das meiner Meinung nach durchaus das Potential hat, einmal Bestandteil von FB zu werden:
https://www.freebasic.net/forum/viewtopic.php?f=8&t=26170

Den Schnipsel oben habe ich übrigens nicht extra geschrieben, sondern aus einem Programm herauskopiert (und nur *etwas* aufgeräumt grinsen ), das ich zur Titelsuche in meiner Musiksammlung benutze.
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 959
Wohnort: Niederbayern

BeitragVerfasst am: 20.12.2017, 02:23    Titel: Antworten mit Zitat

Jojo hat Folgendes geschrieben:
Zitat:
Das bringe ich selber auch noch hin.

Wenn du das hinbekommen hättest, hättest du auch die Konvertierung von ANSI/OEM nach UTF-8 selbst hinbekommen. Hinterher zu sagen dass man das selbt hinbekommen hätte kann jeder tun. Zunge rausstrecken
Wieso hätte? Vielleicht habe ich es hinbekommen? zwinkern Ich brauche genau genommen gar nichts umwandeln. Es ist bereits alles im richtigen Format! Zumindest sieht es danach aus. Ich habe nicht immer die Zeit, dass ich an meinem Projekt was mache. Leider!

Code:
Vor allem verstehe ich nicht, warum du (ALWIM) dich so gegen die Verwendung der utf_conv.bi - Routinen sträubst.
Ich sträube mich nicht. Es lässt sich halt nur schwer in meinem Programm mit einbauen. Außerdem, such ich immer nach Alternativen. Manchmal ist das besser und manchmal das. Und das bessere nehme ich dann.

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 834
Wohnort: Ruhrpott

BeitragVerfasst am: 20.12.2017, 22:10    Titel: Antworten mit Zitat

ALWIM hat Folgendes geschrieben:
Es lässt sich halt nur schwer in meinem Programm mit einbauen.
Wieso? Ganz vorne im Programm
Code:
#Include Once "utf_conv.bi"
dann
Code:
Function UTF(s As String) As String
   Dim As String sUTF
   Dim As Integer numberOfBytes
   
   sUTF = String(Len(s) * 2, " ")
   CharToUTF(UTF_ENCOD_UTF8, StrPtr(s), Len(s), StrPtr(sUTF), @numberOfBytes)
   Return Left(sUTF, numberOfBytes)
End Function
in den Quellcode kopieren und statt beispielsweise
Code:
Print #ff, text
dann jeweils
Code:
Print #ff, UTF(text)

Was ist daran schwer einzubauen? verwundert

Was das Suchen von Alternativen betrifft, muß ich dir allerdings zustimmen. Es ist immer gut, im Zweifel noch einen Plan B zu haben. lächeln

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 905
Wohnort: Austria

BeitragVerfasst am: 20.12.2017, 22:42    Titel: Antworten mit Zitat

ALWIM hat Folgendes geschrieben:
Jojo hat Folgendes geschrieben:
Zitat:
Das bringe ich selber auch noch hin.

Wenn du das hinbekommen hättest, hättest du auch die Konvertierung von ANSI/OEM nach UTF-8 selbst hinbekommen. Hinterher zu sagen dass man das selbt hinbekommen hätte kann jeder tun. Zunge rausstrecken
Wieso hätte? Vielleicht habe ich es hinbekommen? zwinkern Ich brauche genau genommen gar nichts umwandeln. Es ist bereits alles im richtigen Format! Zumindest sieht es danach aus.
Naja, so wie es aussieht planst du gar nichts du machen bzw. allerhöchst bestimmte Sonderzeichen durch Zeichenfolgen zu ersetzen, wobei das alles vorher schon mit zahlreichen Codebeispielen demonstriert wurde, die du nur noch kopieren und eventuell leicht an dein Programm anpassen müsstest.

ALWIM hat Folgendes geschrieben:
Code:
Vor allem verstehe ich nicht, warum du (ALWIM) dich so gegen die Verwendung der utf_conv.bi - Routinen sträubst.
Ich sträube mich nicht. Es lässt sich halt nur schwer in meinem Programm mit einbauen. Außerdem, such ich immer nach Alternativen. Manchmal ist das besser und manchmal das. Und das bessere nehme ich dann.
Die Implementierung wurde dir ja ohnehin schon fast zur Gänze anhand von Beispielen gezeigt, was ist denn da noch schwierig bzw. wo brauchst du noch Hilfe? Und die Problemumgehung, bestimmte Sonderzeichen zu ersetzen, ist vielleicht eine einfachere, aber bestimmt keine bessere Lösung.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3  Weiter
Seite 2 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz