Recode Latin1 -> UTF-8, Probleme mit dem CVS

Hallo an alle!

Ich habe mit dem Befehl
find . -name ‚*.php‘ -exec recode latin1…utf8 {} ;
alle .php-Dateien von Latin1 in UTF-8 gewandelt.

Dies scheint auch funktioniert zu haben, da wenn ich sie mit UTF-8 öffne, die Datei korrekt aussieht, mit Latin1 die Umlaute hingehen bspw. „verstümmelt“ sind.

Nun habe ich das ganze im CVS drin und will diese Änderung gerne kommitten. Leider werden aber die mittels recode geänderten Dateien nicht angezeigt, dass die geändert wurden und somit kann ich nichts kommitten.

Wenn ich ein Leerzeichen in eine Datei am Anfang mache und dieses gleich wieder entferne in einem Texteditor unter UTF-8 und speichere, so ist es möglich das Dokument zu kommitten, wobei mir das Vorschau-Ausgabefenster nun hier anzeigt (LinCVS), dass die Umlaute nun alle „verstümmelt“ wären.

Was meint ihr dazu? Was kann ich tun? Oder habe ich doch beim recode etwas falsch gemacht?

Gruß PHANTOM

Hallo Phantom,

Ich habe mit dem Befehl
find . -name ‚*.php‘ -exec recode latin1…utf8 {} ;
alle .php-Dateien von Latin1 in UTF-8 gewandelt.

Bis auf das Escapen von {}, also {}, das ich immer brauche, sieht das doch gut aus.

Nun habe ich das ganze im CVS drin und will diese Änderung
gerne kommitten. Leider werden aber die mittels recode
geänderten Dateien nicht angezeigt, dass die geändert wurden
und somit kann ich nichts kommitten.

Daß du das alles in deinem Working-Directory gemacht hast, setze ich jetzt mal voraus. Aber was für eine Umgebung hast Du eigentlich standardmäßig, UTF8 oder was mit ISO?

Wenn ich ein Leerzeichen in eine Datei am Anfang mache und
dieses gleich wieder entferne in einem Texteditor unter UTF-8
und speichere, so ist es möglich das Dokument zu kommitten,
wobei mir das Vorschau-Ausgabefenster nun hier anzeigt
(LinCVS), dass die Umlaute nun alle „verstümmelt“ wären.

Kann es sein, daß LinCVS kein UTF kann bzw. umgestellt werden muss? Dummerweise weigert sich die Homepage von LinCVS mir was anderes als die Startseite zu zeigen :frowning:

Sonst fällt mir nicht ein, warum beim commit die geänderten Dateien nicht als geändert erkannt werden. Diejenigen, die gar keine entsprechenden Umlaute enthalten kann ich ja noch verstehen. Aber jede Datei mit nur einem ä z.B. müsste ja auch ein Byte länger sein, oder?

War leider noch keine Hilfe, vielleicht fällt ja jemand noch was ein.

Viele Grüße
Marvin

Hallo PHANTOM,

Ich habe mit dem Befehl
find . -name ‚*.php‘ -exec recode latin1…utf8 {} ;
alle .php-Dateien von Latin1 in UTF-8 gewandelt.

Ich habe mir während der Busfahrt nach Hause das ganze nochmals durch den Kopf gehen lassen und eine Hypothese zusammengebastelt. Kann es sein, daß die Dateien schon in utf8 waren? Dann ändert sich natürlich nichts und sie erscheinen demnach auch beim commit nicht, wozu auch, es sind die selben wie vorher. Erst dein Editor (welcher?) macht aus UTF wieder ISO oder so…
Zieh doch nochmals ein paar Dateien aus dem Repository und überprüfe sie mit

file Dateiname

Da wird ja ausgegeben, um welche Codierung es sich handelt.

Als Notlösung (ohne Klärung der Ursache) könntest Du in Verbindung mit find (wie vorhin) ein touch über alle Dateien laufen lassen. Ich weiss jetzt nicht, ob das für LinCVS ausreicht, sie dann als geändert anzusehen, aber einen Versuch wäre es wert.

Viele Grüße
Marvin

Hallo PHANTOM,

Ich habe mit dem Befehl
find . -name ‚*.php‘ -exec recode latin1…utf8 {} ;
alle .php-Dateien von Latin1 in UTF-8 gewandelt.

Ich habe mir während der Busfahrt nach Hause das ganze
nochmals durch den Kopf gehen lassen und eine Hypothese
zusammengebastelt. Kann es sein, daß die Dateien schon in utf8
waren? Dann ändert sich natürlich nichts und sie erscheinen
demnach auch beim commit nicht, wozu auch, es sind die selben
wie vorher. Erst dein Editor (welcher?) macht aus UTF wieder
ISO oder so…

Nein, ich habe es überprüft: Vorher war bspw. eine Datei 6056, nun ist sie 6065 groß, nämlich genau die Anzahl der Umlaute die enthalten waren, stieg an. Also wurden sie tatsächlich UTF-8 gewandelt.

Ich habe auch eine Möglichkeit gefunden das CVS umzustellen, dass nun mit UTF-8 gearbeitet wird.
Jetzt erscheint es auch korrekt, aber immer erst dann steht es als Änderung da wenn ich wie schon geschrieben ein Leerzeichen einfüge, und das wieder löschen und abspeichere.
Beispielsweise sieht dann der diff so aus:
/* prüfen von login und password *
-> Ist also nun so korrekt.

Zieh doch nochmals ein paar Dateien aus dem Repository und
überprüfe sie mit

file Dateiname

Da wird ja ausgegeben, um welche Codierung es sich handelt.

$ file changelog.txt
changelog.txt: UTF-8 Unicode C program text
-> Wurde umgewandelt.

Als Notlösung (ohne Klärung der Ursache) könntest Du in
Verbindung mit find (wie vorhin) ein touch über alle Dateien
laufen lassen. Ich weiss jetzt nicht, ob das für LinCVS
ausreicht, sie dann als geändert anzusehen, aber einen Versuch
wäre es wert.

Ich habe mal ein touch auf eine Datei gemacht und siehe da, so klappt es, das kann ich dann kommitten.

Kannst du mir sagen ob das korrekt ist, bevor ich es ausführe?
find . -name ‚*.php‘ -exec touch {} ;

Danke + Gruß PHANTOM

Hallo Marvin!

Bis auf das Escapen von {}, also {}, das ich immer brauche,
sieht das doch gut aus.

Wieso escapsed du das denn?

Wenn ich ein Leerzeichen in eine Datei am Anfang mache und
dieses gleich wieder entferne in einem Texteditor unter UTF-8
und speichere, so ist es möglich das Dokument zu kommitten,
wobei mir das Vorschau-Ausgabefenster nun hier anzeigt
(LinCVS), dass die Umlaute nun alle „verstümmelt“ wären.

Kann es sein, daß LinCVS kein UTF kann bzw. umgestellt werden
muss? Dummerweise weigert sich die Homepage von LinCVS mir was
anderes als die Startseite zu zeigen :frowning:

LinCVS-Homepage und deren Hilfe ist eh Mist. Habe es aber auf UTF-8 umstellen können. Leider kann ich das aber nicht projektweise sondern nur global, bedeutet ich muss zwischen meinen verschiedenen Projekten das immer ändern :frowning:
Brauche wohl mal eine etwas professionellere CVS-GUI für meinem mac.

Sonst fällt mir nicht ein, warum beim commit die geänderten
Dateien nicht als geändert erkannt werden. Diejenigen, die gar
keine entsprechenden Umlaute enthalten kann ich ja noch
verstehen. Aber jede Datei mit nur einem ä z.B. müsste ja auch
ein Byte länger sein, oder?

Ist auch länger geworden wie in meinem anderen Posting berichtet.

Gruß PHANTOM

Ich habe das touch getestet, es scheint zu funktionieren.
Trotzdem habe ich noch Sorgen, da manche Dateien sich nicht geändert haben und die sind dann ja wohl nicht im CVS richtig enthalten trotz wenn ich beim CVS:
Zeichensatz zum Kodieren
Zeichensatz zum Dekodieren
jeweils UTF-8 auswähle.

Gruß PHANTOM

Hallo PHANTOM!

Bis auf das Escapen von {}, also {}, das ich immer brauche,
sieht das doch gut aus.

Wieso escapsed du das denn?

Weil ich ein alter störrischer Esel bin :wink:
Ich habe es vor langer Zeit so gelernt und seitdem mache ich das so, ohne groß drüber nachzudenken. Ich kann mich noch an Fehlermeldungen erinnern, die kamen, wenn ich es nicht escapt hatte. Das war aber wahrscheinlich noch in der Steinzeit, als ich noch mit der Korn-Shell gearbeitet habe.
Jetzt wo Du mich mit der Nase drauf gestossen hast, habe ich es einfach weggelassen, und siehe da, es geht :smile: Wieder zwei Tastendrücke eingespart. Danke für den Tipp.

Habe es aber auf
UTF-8 umstellen können. Leider kann ich das aber nicht
projektweise sondern nur global, bedeutet ich muss zwischen
meinen verschiedenen Projekten das immer ändern :frowning:
Brauche wohl mal eine etwas professionellere CVS-GUI für
meinem mac.

Tja, es gibt noch ein paar andere GUIs für CVS, aber mit dem Mac kenne ich mich gar nicht aus. Aber ich hatte einfach immer den Emacs, bzw. XEmacs für CVS benutzt. Der hatte unter Tools alles dabei, checkout usw. Ist aber nicht jedermanns Geschmack, das ist klar.

Viele Grüße
Marvin

Hallo PHANTOM,

Ich habe das touch getestet, es scheint zu funktionieren.

Na klar, was soll da schon schief gehen. Bei -exec rm wäre ich da schon vorsichtiger, aber so…

Trotzdem habe ich noch Sorgen, da manche Dateien sich nicht
geändert haben und die sind dann ja wohl nicht im CVS richtig
enthalten

Naja, wenn ich mich recht erinnere, macht recode eben nichts, wenn die Ausgangscodierung nicht der angegebenen entspricht.
Aber touch müsste doch reichen, das ändert doch meines Wissens sowohl die Zugriffszeit als auch die Modifikationszeit. Das ist im Endeffekt doch dasselbe wie blank einfügen und wieder entfernen.

Viele Grüße
Marvin