Ändern der Datei-Kodierung utf-8 per vim in einem Skript
ich habe gerade abgerissen, nachdem unser server wurde aktualisiert aus Debian 4 auf 5.
Wir eingeschaltet, um UTF-8-Umgebung, und jetzt haben wir Probleme damit, den text korrekt auf dem browser, weil alle Dateien sind in nicht-utf-8-Kodierungen wie iso-8859-1, ascii, etc.
Habe ich versucht viele verschiedene Schriften.
Die erste, die ich versuchte ist "iconv". Dass man nicht arbeiten, es ändert sich der Inhalt, sondern die Dateien enconding noch nicht-utf8.
Gleiche problem mit enca, encamv, convmv und einigen anderen tools, die ich installiert über apt-get.
Dann fand ich einen python-code, der verwendet chardet Universal-Detektor-Modul, zur Erkennung der Codierung einer Datei (das funktioniert), sondern über die unicode-Klasse oder der codec Klasse, um es zu speichern als utf-8 nicht funktioniert, ohne Fehler.
Die einzige Möglichkeit, die ich gefunden, um die Datei und Ihre Inhalte in UTF-8 konvertiert, ist vi.
Diese sind die Schritte, die ich tun für eine Datei:
vi filename.php
:set bomb
:set fileencoding=utf-8
:wq
Thats it. Dass man arbeitet perfekt. Aber wie kann bekommen, dies läuft über ein script.
Ich möchte ein Skript schreiben (linux-shell), die durch ein Verzeichnis unter allen php-Dateien, dann konvertieren Sie Sie mit dem vi mit der oben genannten Befehle.
Wie muss ich starten Sie den vi-app, ich weiß nicht, wie zu tun etwas wie dieses:
"vi --run-command=':set bomb, :set fileencoding=utf-8' filename.php"
Hoffe mir kann jemand helfen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist die einfachste Möglichkeit, die ich kenne, um dies zu tun, leicht von der Befehlszeile aus:
Oder noch besser, wenn die Anzahl der Dateien dürfte ziemlich groß sein:
vim +"set bomb | set fileencoding=utf-8 | wq" $(find . -type f -name *.php)
Könnten Sie setzen Ihre Befehle in einer Datei, nennen wir es
script.vim
:Dann rufen Sie Vim mit den
-S
(Quelle) option, um das Skript ausführen auf die Datei, die Sie möchten, zu beheben. Um dies zu tun, auf eine Reihe von Dateien, die Sie tun könntenKönnte man auch die Vim-Befehle auf der Kommandozeile mittels des
+
option, aber ich denke, es kann mehr lesbar wie dieses.Hinweis: ich habe nicht getestet.
bomb
bricht ASCII-Kompatibilität. Siehe die Antwort.Können Sie eigentlich wollen set nobomb (BOM = byte order mark), vor allem in den [nicht windows] - Welt.
z.B., hatte ich ein Skript, dass hat nicht funktioniert da war ein byte order mark) an den start. Es ist in der Regel nicht angezeigt, in den Editoren (auch mit set-Liste in vi), oder auf der Konsole, so dass Ihr schwer zu sehen.
Die Datei sah so aus
Aber versuchen, es zu starten, bekomme ich
Nicht angezeigt, aber beim starten der Datei, ist die 3-byte-Stückliste. Also, So weit wie linux betrifft, die Datei beginnt nicht mit #!
Die Lösung ist
Dieser entfernt den BOM am Anfang der Datei, so dass es korrekt utf8.
NB Windows verwendet die Stückliste zu identifizieren, die eine text-Datei als utf8 statt ANSI. Linux (und die offizielle spec) nicht.
Die Antwort akzeptiert wird, halten Sie die Letzte Datei öffnen in Vim. Dieses problem kann einfach gelöst werden mit der
-c
option des Vim,Wenn Sie brauchen nur eine Datei, die folgenden werden auch arbeiten,