Wir sind auf Ihre Unterstützung angewiesen!
💚 BITTE helfen Sie uns HEUTE mit einer SPENDE 💚
Helfen Sie das LibreOffice Forum zu erhalten!
> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
unterschiedlicher Zeichensatz
unterschiedlicher Zeichensatz
Ich lese mit LINE INPUT eine Datei ein, welche von einem externen Programm weggeschrieben wurde. Nachdem in manchen Zeilen HTML-Code vorhanden ist, eliminiere ich diesen, bzw. ersetze die Umlaute durch z. B.
sText = Replace(sText,"ä","ä")
Die Zeilen werden mit PRINT in eine andere Datei weggeschrieben.
Vorhandene, nicht geänderte Umlaute (da nicht HTML-Code) werden im Editor richtig dargestellt. Die geänderten jedoch mit � . Beim Einlesen dieser weggeschriebenen Datei in einem weiteren Programm wird von einem Zeichensatz UTF-8 und eingestellter Codepage 1252 ausgegangen. Die durch das vba-Macro nicht geänderten Umlaute kommen richtig, die geänderten jedoch als Leerzeichen.
Woran liegt das?
sText = Replace(sText,"ä","ä")
Die Zeilen werden mit PRINT in eine andere Datei weggeschrieben.
Vorhandene, nicht geänderte Umlaute (da nicht HTML-Code) werden im Editor richtig dargestellt. Die geänderten jedoch mit � . Beim Einlesen dieser weggeschriebenen Datei in einem weiteren Programm wird von einem Zeichensatz UTF-8 und eingestellter Codepage 1252 ausgegangen. Die durch das vba-Macro nicht geänderten Umlaute kommen richtig, die geänderten jedoch als Leerzeichen.
Woran liegt das?
Re: unterschiedlicher Zeichensatz
Hallo,
ich weiß nicht was bei Dir schief läuft.
Dann teste mal meinen Code (siehe weiter unten).
Info:
Hier eine Datei mit einer Unicode-Liste: 0-65536
http://unicode.org/main.html
ich weiß nicht was bei Dir schief läuft.
Was meist Du mit Editor?Vorhandene, nicht geänderte Umlaute (da nicht HTML-Code) werden im Editor richtig dargestellt.
- Die Basic-IDE
- Writer oder Calc oder
- Notepad++ oder ein anderer Editor?
- oder
geändert mit diesem Code?Die geänderten jedoch mit �
Code: Alles auswählen
sText = Replace(sText,"ä","ä")
Info:
- Zeichen = ä
- hexadezimal = 00E4
- dezimal = 228
- Zeichen = �
- hexadezimal = FFFD
- dezimal = 65533
Code: Alles auswählen
REM ***** BASIC *****
Sub Main
sText="ä"
sText = Replace(sText,"ä","ä")
msgbox sText & Chr(10) _
& "dezimal → " & asc(sText) & chr(10) _
& "hexadezimal → " & hex(asc(sText)) & Chr(10) _
& Chr(10) _
& Chr(65533) & Chr(10) _
& "dezimal → " & asc(Chr(65533)) & chr(10) _
& "hexadezimal → " & hex(Chr(65533)), 64, "Unicode" & " ↔ " & "Zeichen"
End Sub
Gruß
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Re: unterschiedlicher Zeichensatz
Dein Testprogramm liefert:
ä
dezimal → 228
hexadezimal → E4
�
dezimal → 65533
hexadezimal → 0
Habe das ursprünglich mit Visual Studio (Editor) angesehen.
Habe das nochmal mit Notepad ausprobiert. Alle Umlaute, welche ich auch einlese, werden in UTF-8 richtig weggeschrieben. Alle Änderungen, welche ich im Makro vornehme, werden als ANSI erzeugt. Folglich in UTF-8 falsch interpretiert.
Wie kann ich die Änderungen in UTF-8 vornehmen? Wie gebe ich den Hex- oder dezimal-Code für das jeweilige Zeichen bei z. B. REPLACE an?
ä
dezimal → 228
hexadezimal → E4
�
dezimal → 65533
hexadezimal → 0
Habe das ursprünglich mit Visual Studio (Editor) angesehen.
Habe das nochmal mit Notepad ausprobiert. Alle Umlaute, welche ich auch einlese, werden in UTF-8 richtig weggeschrieben. Alle Änderungen, welche ich im Makro vornehme, werden als ANSI erzeugt. Folglich in UTF-8 falsch interpretiert.
Wie kann ich die Änderungen in UTF-8 vornehmen? Wie gebe ich den Hex- oder dezimal-Code für das jeweilige Zeichen bei z. B. REPLACE an?
Re: unterschiedlicher Zeichensatz
Hallo,
LibreOffice/ OpenOffice arbeiten mit UTF-8.
Ich weiß an dieser Stelle allerdings nicht, wie die Office interne Zeichenverarbeitung funktioniert.
ASCII oder UTF-8?
Weil in Makros die Runtime-Funktionen zum Einsatz kommen, welche eindeutig ASCII-basiert sind.
Ggf. ist dies ein Relikt aus alten StarOffice-Tagen.
https://de.wikipedia.org/wiki/American_ ... nterchange
https://de.wikipedia.org/wiki/ANSI-Zeichencode
https://www.torsten-horn.de/techdocs/ascii.htm
MS-Programme haben früher nur mit dem ASCII- und später mit dem erweiterten ANSI-Zeichensatz gearbeitet.
Wie das heute ist weiß ich nicht so genau.
Wenn Du mit Notepad den Windows-Editor meinst, dann empfehle ich Dir mal Notepad++ zu testen.
Hiermit können die Zeichenkodierungen direkt über die Menüleiste konvertiert werden.
Im wesentlichen habe ich nur die beiden ASCII-Runtime-Funktionen ASC() und CHR() verwendet.
http://www.dannenhoefer.de/faqstarbasic ... ibtes.html
----------------------------------------------------
Korrekt ist:
hexadezimal → FFFD[/quote]
Korrigierter Code:
---------------------------------------------------------------------------------
Mit Visual Studio (Editor) und mit VB/ VBA wird hier nicht programmiert, sondern
mit der Basic-IDE und der Sprache StarBasic.
Wobei die Sprache Starbasic abhängig von der ausgeführten Applikation (Writer/ Calc/, usw.) ist.
Mehr weiß ich nicht zu diesem Thema.
LibreOffice/ OpenOffice arbeiten mit UTF-8.
Ich weiß an dieser Stelle allerdings nicht, wie die Office interne Zeichenverarbeitung funktioniert.
ASCII oder UTF-8?
Weil in Makros die Runtime-Funktionen zum Einsatz kommen, welche eindeutig ASCII-basiert sind.
Ggf. ist dies ein Relikt aus alten StarOffice-Tagen.
https://de.wikipedia.org/wiki/American_ ... nterchange
https://de.wikipedia.org/wiki/ANSI-Zeichencode
https://www.torsten-horn.de/techdocs/ascii.htm
MS-Programme haben früher nur mit dem ASCII- und später mit dem erweiterten ANSI-Zeichensatz gearbeitet.
Wie das heute ist weiß ich nicht so genau.
Wenn Du mit Notepad den Windows-Editor meinst, dann empfehle ich Dir mal Notepad++ zu testen.
Hiermit können die Zeichenkodierungen direkt über die Menüleiste konvertiert werden.
- Menü Kodierung
Wie gebe ich den Hex- oder dezimal-Code für das jeweilige Zeichen bei z. B. REPLACE an?
Mein Makro liefert das korrekte Ergebnis (bis auf einen kleinen Flüchtigkeitsfehler: siehe weiter unten ).Alle Änderungen, welche ich im Makro vornehme, werden als ANSI erzeugt. Folglich in UTF-8 falsch interpretiert.
Im wesentlichen habe ich nur die beiden ASCII-Runtime-Funktionen ASC() und CHR() verwendet.
http://www.dannenhoefer.de/faqstarbasic ... ibtes.html
Wie gebe ich den Hex- oder dezimal-Code für das jeweilige Zeichen bei z. B. REPLACE an?
- ASCII → 65 → großes A
- UTF-8 → 65 → großes A
Code: Alles auswählen
Sub Main
' liefert das Zeichen
msgbox chr(65) & chr(10) _
& chr(228),64,"liefert das Zeichen"
' liefert den Dezimal-Code
msgbox asc("A") & chr(10) _
& asc("ä"),64,"liefert den Dezimal-Code"
' Verkettung von Zeichen
msgbox "Zeichenkette → " & chr(65) &chr(66) &chr(67) & chr(10) _
& "Dezimal-Code → " & asc("A") & " → " & asc("B") & " → " &asc("C") ,64,"Verkettung von Zeichen"
End Sub
Da ist mir doch glatt ein Fehler passiert...�
dezimal → 65533
hexadezimal → 0
Korrekt ist:
hexadezimal → FFFD[/quote]
Korrigierter Code:
Code: Alles auswählen
REM ***** BASIC *****
Sub Main
sText="ä"
sText = Replace(sText,"ä","ä")
msgbox sText & Chr(10) _
& "dezimal → " & asc(sText) & chr(10) _
& "hexadezimal → " & hex(asc(sText)) & Chr(10) _
& Chr(10) _
& Chr(65533) & Chr(10) _
& "dezimal → " & asc(Chr(65533)) & chr(10) _
& "hexadezimal → " & hex(ASC("�")), 64, "Unicode" & " ↔ " & "Zeichen"
End Sub
Mir ist weder Dein Code, noch Dein konkretes Vorgehen bekannt.Alle Änderungen, welche ich im Makro vornehme, werden als ANSI erzeugt. Folglich in UTF-8 falsch interpretiert.
Mit Visual Studio (Editor) und mit VB/ VBA wird hier nicht programmiert, sondern
mit der Basic-IDE und der Sprache StarBasic.
Wobei die Sprache Starbasic abhängig von der ausgeführten Applikation (Writer/ Calc/, usw.) ist.
Mehr weiß ich nicht zu diesem Thema.
Gruß
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Re: unterschiedlicher Zeichensatz
Es geht nur eins von beidem. Entweder man benutzt Unicode 8/16/32
oder ein System in dem eine Zusätzliche Codepage festlegt, wie Zahlen und Symbole zugeordnet werden.
Mfg, Jörn
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit
Re: unterschiedlicher Zeichensatz
Hallo,
Du hast das Zeichen einfach geschrieben und die Kodierung der Basic-IDE / dem Macro-Interpreter überlassen. Ich schätze hier wird das falsche 8bit-Zeichen erzeugt.
Wenn Du den Code selbst via CHR() erzeugst, sollte es passen.
Siehe
https://forum.openoffice.org/en/forum/v ... hp?t=83800
Mfg, Jörn
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit
Re: unterschiedlicher Zeichensatz
Hallo,craig hat geschrieben: ↑Mi 24. Jun 2020, 21:36Hallo,
LibreOffice/ OpenOffice arbeiten mit UTF-8.
Ich weiß an dieser Stelle allerdings nicht, wie die Office interne Zeichenverarbeitung funktioniert.
ASCII oder UTF-8?
Weil in Makros die Runtime-Funktionen zum Einsatz kommen, welche eindeutig ASCII-basiert sind.
Ggf. ist dies ein Relikt aus alten StarOffice-Tagen.
ich glaube mich zu erinnern, dass intern Unicode-16 verwendet wird.
Wenn man sich den oben von mir angegebenen Link ansieht, scheint die CHR-Funktion durchaus mit Unicode umgehen zu können: CHR(11389)
Man muss sich aber gelegentlich daran erinnern, dass das Umfeld nicht einfacher geworden ist.
In Calc ist das Verhalten von Code() und Zeichen() auch nur für 7/8-Bit definiert, danach gibt es z.B. UNIZEICHEN()
https://help.libreoffice.org/4.4/Calc/T ... ns/de#CODE
mfg, Jörn
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit
Re: unterschiedlicher Zeichensatz
Danke zunächst für eure Antworten.
-> Jörn
Hab das mal mit CHR() ausprobiert, geht nur intern, aber ist im Outputfile falsch. Dazu ein kleines Testmakro. (Arbeite in Calc.)
Das Input-File:
Das Print am Bildschirm bringt jeweils:
1 äöüÖÄÜß
Das Output-File:
PRINT (auch MsgBox) macht was anderes als PRINT #2 ? Erfolgt zwischen internen Variablen und Print noch eine Konvertierung?
-> Jörn
Hab das mal mit CHR() ausprobiert, geht nur intern, aber ist im Outputfile falsch. Dazu ein kleines Testmakro. (Arbeite in Calc.)
Code: Alles auswählen
Sub Test1
Dim sText as String
Open "d:\WEB\GEDCOM\Test.ged" For Input AS 1
Open "d:\WEB\GEDCOM\Test2.ged" For Output AS 2
DO WHILE NOT EOF(1)
Line Input #1, sText
sText = Replace(sText,"ä",CHR(228))
sText = Replace(sText,"Ö",CHR(214))
Print #2,sText
Print sText
Loop
End Sub
Code: Alles auswählen
1 äöüÖÄÜß
1 NOTE ä
1 NOTE Ö
1 äöüÖÄÜß
Code: Alles auswählen
1 NOTE ä
1 NOTE Ö
Code: Alles auswählen
1 äöüÖÄÜß
1 NOTE �
1 NOTE �
Re: unterschiedlicher Zeichensatz
Hallo,
ich glaube wir drehen uns hier im Kreis.
Die Extrension .ged ist keine Libreoffice Dateinamenserweiterung
und nach meiner Recherche geht es um diese Anwendung:
http://www.geditcom.com/tutorials/index.html
Es ist möglich, dass die erzeugten Zeichen nicht HTML-codiert sind, sondern
JAVA-codiert und dies könnte auch ein Grund für Deine Konvertierungsprobleme sein.
JAVA Umlaute
Hier eine Beispieldatei mit einem "Suchen & Ersetzen" Makro.
Das Makro ist nur in Writer lauffähig! Lese auch die Seite 2, dort kannst Aus Deiner .ged-Datei einen Beispieltext einfügen und das Ergebnis prüfen.
Lese auch Seite 1, dort beschreibe ich wie die die Suchen-/ Ersetzen-Array's funktionieren.
Sucharray = Array("Ä","ä","Ö","ö","Ü","ü","ß")
Änderung im Makro, durch einfügen weitere Arrayfelder ist jederzeit möglich, beachte aber meine Beschreibung!
kurzes Beispiel:
ich glaube wir drehen uns hier im Kreis.
Die Extrension .ged ist keine Libreoffice Dateinamenserweiterung
und nach meiner Recherche geht es um diese Anwendung:
http://www.geditcom.com/tutorials/index.html
Es ist möglich, dass die erzeugten Zeichen nicht HTML-codiert sind, sondern
JAVA-codiert und dies könnte auch ein Grund für Deine Konvertierungsprobleme sein.
JAVA Umlaute
Hier eine Beispieldatei mit einem "Suchen & Ersetzen" Makro.
Das Makro ist nur in Writer lauffähig! Lese auch die Seite 2, dort kannst Aus Deiner .ged-Datei einen Beispieltext einfügen und das Ergebnis prüfen.
Lese auch Seite 1, dort beschreibe ich wie die die Suchen-/ Ersetzen-Array's funktionieren.
Sucharray = Array("Ä","ä","Ö","ö","Ü","ü","ß")
Änderung im Makro, durch einfügen weitere Arrayfelder ist jederzeit möglich, beachte aber meine Beschreibung!
kurzes Beispiel:
Code: Alles auswählen
mFind = Array("Ä","ä","Ö","ö","Ü","ü","ß","Banane")
mReplace = Array("Ä", "ä", "Ö", "ö", "Ü", "ü","ß","Apfel")
Gruß
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Re: unterschiedlicher Zeichensatz
Hallo,
ist natürlich ärgerlich. Offensichtlich ist für die Konsole / Msgbox ein anderer Zeichensatz hinterlegt, als für direktes Schreiben in eine Textdatei.
Bei diesen Dingen wird einem klar, warum Python so nervt, damit die Zeichenkodierung hinhaut.
In jedem Fall kenne ich keine Möglichkeit BASIC auf Unicode umzustellen.
Du könntest aber versuchen die Byte-Sequenz selbst zu schreiben (als 2 8-bit Zeichen).
Mfg, Jörn
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit
An alle, die das LibreOffice-Forum nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️