Seite 1 von 1

Von Latin1 auf UTF8 umstellen mehrere Dateien

Verfasst: So 5. Mär 2023, 21:53
von Lorz
Hallo!

Ich habe folgendes Problem:
Ich habe einige tausende tex-files auf meinem Rechner. Leider sind einige davon auf Latin1 eingestellt, damit meine ich, dass in der Präambel "\usepackage [latin1]{inputenc}" steht und die Konsole (bei mir Tex-Studio) auf "ISO-8859(...)" eingestellt ist.
Ich würde gern alle diese Dateien auf "UTF8" stellen, also die Konsoleneinstellung für diese Dateien ändern. (Das "\usepackage [latin1]{inputenc}" kann ich danach easy per Terminal mit sed für alle ersetzen mit UTF8 (oder einfach weglassen - UTF8 ist doch eh default, ne?)).
Kann man diese Einstellung irgendwie für viele (alle?) Dateien gleichzeitig vornehmen? Für jede einzeln wäre das ein Horror😵💫

Vielen Dank im Voraus!

Re: Von Latin1 auf UTF8 umstellen mehrere Dateien

Verfasst: So 5. Mär 2023, 22:07
von MoeWe
Kommt ganz auf Dein Betriebssystem an. Bei Stackoverflow gibt es folgende Sammlung: https://stackoverflow.com/q/64860. Da sollte für alle was dabei sein. Die meisten Lösungen lassen sich auch scripten. (Da Du sed erwähnst und dass es kein Problem sei, ein paar Zeilen in den einzelnen Dateien damit auszutauschen, weißt Du wahrscheinlich prinzipiell wie man das machen würde.)

Es ist wohl selbstverständlich, aber nur der Sicherheit halber: Bitte vor solchen Dingen immer alle Dateien sichern (und zwar so, dass sie nicht versehentlich auch mitverändert werden).

Re: Von Latin1 auf UTF8 umstellen mehrere Dateien

Verfasst: So 5. Mär 2023, 22:27
von Lorz
Danke an MoeWe für die rasche Antwort.

OK, das klingt ja schon mal erleichternd!
Ich finde unter Deinem Link für Unix/OS x - ich will den Mac Terminal benutzen -
$ iconv -f UTF-8 -t ISO-8859-15 in.txt > out.txt
Allerdings bin ich nun leider doch zu sehr Anfänger. Dh ich habe folgende Bedürfnisse, die ich nicht alle so schnell in obiges einzupflegen weiß.

Klar: ich will andersherum konvertieren. Und es muss auch das richtige ISO sein. Und es handelt sich natürlich um .tex und nicht .txt. Das kriege ich hin.
Aber: Ich will dies auf den Inhalt ganzer Ordner anwenden. Und ich brauche einen Befehl, der keinen Schaden anrichtet, wenn er auf eine bereits in UTF8-formatierte Datei trifft.

Falls mir hier also doch jemand unter die Arme greifen kann, wäre ich sehr dankbar!

Re: Von Latin1 auf UTF8 umstellen mehrere Dateien

Verfasst: Mo 6. Mär 2023, 18:08
von MoeWe
Ich habe leider keinen Mac, kann also keine getesteten Vorschläge liefern. Daher nur ein paar Gedanken.

In dem Link wird auch auf chardet verwiesen, mit dem man die Codierung erraten lassen kann. Damit könntest Du verhindern, UTF-8 doppelt umzuwandeln. Allerdings kannst Du ja auch versuchen, Deine zwei notwendigen Bearbeitungsschritte miteinander auszuführen: Du testest, ob die Datei \usepackage [latin1]{inputenc} in der Präambel stehen hat. Wenn ja, weg damit (oder - wenn Du altmodisch bist wie ich, zu \usepackage [utf8]{inputenc} umschreiben) und dann recodieren. Wenn Du das so machst, dann codierst Du nur Dateien mit Latin-1 um.

Zum Rausfiltern von *.tex gibt es einige Methoden: https://stackoverflow.com/q/14505047 (und spezifisch nach "Mac" gegoogelt: https://stackoverflow.com/q/31797856)

Re: Von Latin1 auf UTF8 umstellen mehrere Dateien

Verfasst: Mo 6. Mär 2023, 18:42
von Lorz
@MoeWe
Ah, das ist ne super Idee, nicht nach tex-Dateien suchen lassen, sondern nach Dateien, in denen Latin1 steht!! Danke!
Damit wäre das eine Problem schon mal gelöst.
Jetzt bräuchte ich nur noch einen Befehl, der solche Dateien sucht und dann die Konvertierung macht und dann die Datei unter gleichem Namen speichert.
Danach kann ich dann easy den Text "Latin1" durch "UTF8" ersetzen.

Ginge sowas in der Art.
find Users/Ich/Documents -name Latin1 -exec iconv -f ISO-8859-15 -t UTF-8 {} > {}utf.tex \;
(Ich bastele mir das aus Brocken, die ich woanders finde, zusammen..)

Re: Von Latin1 auf UTF8 umstellen mehrere Dateien

Verfasst: Mo 6. Mär 2023, 20:17
von MoeWe
Ich würde mal grep probieren, um in Dateien nach \usepackage[latin1]{inputenc} zu suchen. Ich gehe mal davon aus, dass die gefundenen Dateinamen auch an iconv weitergeleitet werden können.

Wie gesagt, ich hab keinen Mac und aktuell schreibe ich auch von meinem Windows-Rechner, sodass ich noch nichtmal die ganzen unixoiden Befehle eben so einfach ausprobieren kann. Ich gehe zwar schon davon aus, dass sich auch eine Reihe anderer hier im Forum mit solchen Themen auskennen (vielleicht sogar einige mit einem Mac), aber eine etwas bessere Chance auf schnelle Hilfe hast Du vielleicht in Foren, die sich nicht unbedingt nur mit TeX sondern wirklich mit Bash-Scripting etc. befassen (ich wüsste auf Anhieb jetzt nicht, was da die beste Adresse wäre - außer StackOverflow). Wenn Du anderswo eine Lösung findest, dann komm aber bitte zurück und verrat uns hier, wie Du es letztendlich gemacht hast.

Re: Von Latin1 auf UTF8 umstellen mehrere Dateien

Verfasst: Mo 6. Mär 2023, 20:44
von Lorz
Also ich nehme auch gern eine Linux-Lösung, ich benutze ja beides.

Die "Lösung"
find /Users/Ich/Documents -name \*.tex -exec iconv -f ISO-8859-15 -t UTF-8 {} > {}utf.tex \;
aus dem Mac-Forum liefert kaputte tex-Datein, die lassen sich gar nicht mehr kompilieren, es erfolgt die Fehlermeldung ! LaTeX Error: File `Latin1.def' not found bzw. ! LaTeX Error: File `UTF8.def' not found.
Die Datei scheint irgend "abgeschnitten" von der TexLive-Einbettung zu sein.

Die eben erdachte Lösung, direkt nach "Latin1" zu suchen, kann ich leider doch gleich wieder verwerfen: Das Terminal kann (zumindest nicht ohne weiteres) keine ISO-formatierten Dateien durchsuchen - das ist ja gerade mein Problem mit dem ISO-Format: Ich möchte sed-Befehle drüber laufen lassen und kriege Fehlermeldungen, wenn ISO-formatierte Dateien im Verzeichnis sind.

Ich probiere mal stackoverflow, Danke.

Re: Von Latin1 auf UTF8 umstellen mehrere Dateien

Verfasst: Mi 8. Mär 2023, 16:07
von Lorz
Soo und wieder zurück mit einer Lösung aus dem Ubuntu-Forum mit seinen so hilfbereiten Mitgliedern.
Dort gibt es jetzt ein Skript. Wie dort von mir erwähnt funktioniert das Skript für Ubuntu und für MacOs tut es der Einzeiler.

https://forum.ubuntuusers.de/topic/mehrere-dateien-konvertieren-per-terminal/#post-9366210

Wo ich jetzt noch richtig scharf drauf bin und von dort noch keine Antwort (Stand: Zeit dieses Postings) drauf erhalten, ist: Wie beziehe ich beim Formatieren auch die Unterverzeichnisse ein?
Bei find, grep usw. kenne ich das mit "-r" für rekursives vorgehen.

Falls hier jemand ne Idee, wie man das in obige Befehle einfließen lässt - her damit! Mein Rumprobieren war bisher nicht erfolgreich.

Re: Von Latin1 auf UTF8 umstellen mehrere Dateien

Verfasst: Mi 8. Mär 2023, 19:30
von rais
versuch statt
for texdatei in /home/Name/Downloads/SchwingkreisKopie/*.tex; do
mal
for texdatei in `find /home/Name/Downloads/SchwingkreisKopie/ -name "*.tex" -print`; do
AFAIR sucht `find' eh rekursiv ab angegebenem Startpunkt.

BTW: Wenn ich mich nicht irre, entspricht ISO-8859-15 latin9. Wenn Deine Dateien latin1-kodiert sind, bist Du mit ISO-8859-1 besser dran.

VG
Rainer

Re: Von Latin1 auf UTF8 umstellen mehrere Dateien

Verfasst: Do 9. Mär 2023, 12:48
von Lorz
rais hat geschrieben:
Mi 8. Mär 2023, 19:30
versuch statt
for texdatei in /home/Name/Downloads/SchwingkreisKopie/*.tex; do
mal
for texdatei in `find /home/Name/Downloads/SchwingkreisKopie/ -name "*.tex" -print`; do
AFAIR sucht `find' eh rekursiv ab angegebenem Startpunkt.

BTW: Wenn ich mich nicht irre, entspricht ISO-8859-15 latin9. Wenn Deine Dateien latin1-kodiert sind, bist Du mit ISO-8859-1 besser dran.

VG
Rainer
Vielen Dank Rainer. Ich habe es mal probiert.
Verhalten am Mac:
Der Terminal gibt eine Fehlermeldung:
mv: rename /Users/Name/Testordner//.!88826!ABSchwingkreisEinfuehrung.tex.new to /Users/Name/Testordner//.!88826!ABSchwingkreisEinfuehrung.tex: No such file or directory
Dennoch sind danach alle tex-Dateien im Verzeichnis und Unterverzeichnis konvertiert und lassen sich auch anstandslos kompilieren.

Verhalten in Ubuntu identisch und die Fehlermeldung lautet
mv: Aufruf von stat für '/home/Name/Downloads/SchwingkreisKopie/._ABSchwingkreissimulationPH01in2022.tex.new' nicht möglich: Datei oder Verzeichnis nicht gefunden