Einführung
OPEN CIRCLE bereitet einen Kunstnachmittag vor. Das Willkommenspaket zeigt das vollständige Programm mit Chloé Martín, 林雨, 佐藤葵 und João Silva. Das korrekte Beispiel funktioniert, der neue Export nicht.
Sie reparieren eine separate Übergabe und bewahren Originale. Grundlegende Terminalkenntnisse genügen. Berechtigungen, erste Skriptzeile und Kodierung werden unterschieden. Der Leser ist vorbereitet; Sie schreiben weder Python noch einen allgemeinen Konverter.
Nutzen Sie durchgehend Terminal im Browser. Beispieldaten und Ausgaben behalten in allen Übersetzungen ihre Originalsprache.
Den Starter reparieren und die Originale bewahren
In diesem Schritt vergleichen Sie ein funktionierendes Paket mit einem Export und erstellen einen direkt ausführbaren Starter. Verwenden Sie Terminal.
Zuerst das echte Ergebnis lesen
cd ändert das Arbeitsverzeichnis. ./ führt eine Datei relativ dazu aus; der Schrägstrich weist die Shell an, diesen Pfad statt einer Befehlssuche zu verwenden. Starten Sie das mitgelieferte Beispiel:
cd /home/labex/project/event
./sample/start.sh
OPEN CIRCLE | Afternoon
14:00 — Welcome / Chloé Martín
14:30 — 纸艺工坊 / 林雨
15:15 — 音の庭 / 佐藤葵
16:00 — Café & questions / João Silva
Lesen Sie jede Zeile einschließlich der Leerzeile. Dies sind die vom mitgelieferten Leser tatsächlich dekodierten Daten, kein Bild oder Erfolgskennzeichen. cat gibt Text aus. Lesen Sie vor der Konvertierung den Exportbeleg:
cat source/export-receipt.txt
Der Beleg nennt UTF-8 mit CRLF für start.sh und UTF-16-LE mit BOM für programme.txt. Die übrigen Dateien sind bereits UTF-8 mit LF. Eine Dateiendung bestimmt keine Kodierung.
Berechtigung und Interpreter-Einstieg unterscheiden
ls -l zeigt Berechtigungen; x bedeutet Ausführungsrecht. Die erste Skriptzeile, der Shebang, beginnt mit #! und nennt den Interpreter. Direkter Start erfordert einen gültigen Einstieg und Ausführungsrecht. Versuchen Sie den Export; dieser Fehler ist beabsichtigt:
ls -l source/start.sh
./source/start.sh
Erwarten Sie permission denied. Textänderungen vergeben keine Rechte. bash file fordert dagegen Bash zum Lesen der Datei auf und umgeht direkten Start und Shebang. Dieses konkrete Skript hat hinter dem Befehl einen Kommentar; das abschließende CR liegt darin. Probieren Sie es:
bash source/start.sh
Erwarten Sie Cannot read programme.txt und einen UTF-8-Dekodierungsfehler. Der Leser wurde erreicht, konnte die Daten aber nicht dekodieren. Der explizite Bash-Aufruf liefert Hinweise, beweist jedoch keinen funktionierenden Direktstart.
cp -a kopiert Verzeichnisinhalte unter Erhalt der Dateimodi. /. bezeichnet den Inhalt einschließlich versteckter Dateien. Erstellen Sie die Übergabe und lassen Sie source/ und sample/ unverändert. mkdir -p erstellt das Verzeichnis samt fehlender Eltern und gelingt auch bei vorhandenem Verzeichnis. chmod u+x gibt dem Eigentümer (u) zusätzlich Ausführungsrecht, ohne andere Rechte zu ändern:
mkdir -p delivery
cp -a source/. delivery/
chmod u+x delivery/start.sh
./delivery/start.sh
Der Direktstart scheitert weiter, etwa mit bad interpreter: /bin/bash^M: no such file or directory. Manche Shells melden cannot execute: required file not found. Das Skript existiert; das CR am Ende des Interpreterpfads verursacht den Fehler. Wiederholtes chmod hilft nicht.
Bytes ansehen und nur die Skriptzeilenenden korrigieren
LF ist Byte 0a; CRLF ist 0d 0a. file beschreibt Formate anhand von Bytemustern. od -An -tx1 -N16 zeigt die ersten 16 Bytes hexadezimal ohne Adressangaben. Nutzen Sie Beleg und Bytes gemeinsam; file erkennt Kodierungen nicht unfehlbar:
file source/start.sh source/programme.txt
od -An -tx1 -N16 source/start.sh
Der Shebang endet mit 0d 0a. Zeilenenden und Zeichenkodierung sind verschieden: Das Skript ist bereits UTF-8. Linux-Anwendungen können CRLF-Text lesen; hier scheitert der Interpreterpfad beim direkten Skriptstart.
sed 's/\r$//' entfernt nur CR am Zeilenende. Einfache Anführungszeichen schützen den Ausdruck; $ bedeutet Zeilenende. > schreibt Standardausgabe in eine andere Datei und ersetzt sie beim Wiederholen. Niemals auf die Eingabe umleiten: Die Shell würde sie vor dem Lesen leeren. && führt den nächsten Befehl nur nach Erfolg aus. mv benennt anschließend die vollständige temporäre Datei um:
sed 's/\r$//' source/start.sh > delivery/start.tmp && mv delivery/start.tmp delivery/start.sh
chmod u+x delivery/start.sh
od -An -tx1 -N16 delivery/start.sh
./delivery/start.sh
Der Shebang endet jetzt mit 0a. Der letzte Befehl erreicht wie Bash explizit Cannot read programme.txt. Sie sind an der Datengrenze, das Paket ist noch nicht fertig. Bei Fehlern erneut von source/start.sh konvertieren und das Ausführungsrecht setzen; das Original nicht bearbeiten.
Das Programm konvertieren und unabhängig ausführen
In diesem Schritt dekodieren Sie die deklarierte UTF-16-Quelle, erhalten den gesamten Text und starten die Übergabe aus einem anderen Verzeichnis. Bleiben Sie in Terminal unter /home/labex/project/event.
Die Kodierungsbelege nutzen
Eine Zeichenkodierung ordnet Zeichen Bytes zu. UTF-8 und UTF-16 stellen dieselben Namen mit anderen Bytes dar. Ein BOM am Beginn von UTF-16 kennzeichnet die Byte-Reihenfolge: ff fe bedeutet Little Endian, fe ff Big Endian. Beides ist UTF-16. Hier ist der BOM ein nützlicher Hinweis, kein grundsätzlich schädliches Präfix.
od -An -tx1 -N16 source/programme.txt
Der Beginn ff fe stimmt mit UTF-16-LE im Beleg überein. Der Leser verlangt UTF-8 ohne BOM. Er akzeptiert CRLF in Textdaten, kann diese UTF-16-Bytes aber nicht als UTF-8 dekodieren. CR entfernen oder die Endung ändern leistet keine Dekodierung.
iconv -f UTF-16 -t UTF-8 dekodiert UTF-16 mit BOM und kodiert als UTF-8. -f bezeichnet die Quelle, -t das Ziel; UTF-16 nutzt den BOM für die Byte-Reihenfolge. Schreiben Sie zunächst temporär und übernehmen Sie nur bei Erfolg:
iconv -f UTF-16 -t UTF-8 source/programme.txt > delivery/programme.tmp && mv delivery/programme.tmp delivery/programme.txt
file delivery/programme.txt
od -An -tx1 -N16 delivery/programme.txt
cat delivery/programme.txt
Die ersten Bytes sind jetzt der UTF-8-Titel, nicht ff fe, fe ff oder der UTF-8-BOM ef bb bf. Vergleichen Sie jeden Namen mit dem Beispiel: Nicht-ASCII-Zeichen zu entfernen verliert Inhalte, selbst wenn die Datei danach dekodierbar ist.
Bei einem iconv-Fehler kann die Ausgabe unvollständig sein. && verhindert deren Übernahme. Prüfen Sie die deklarierte Kodierung und wiederholen Sie von der unveränderten Quelle; verwenden Sie weder -c noch //IGNORE zum stillen Verwerfen von Zeichen. Die Lektion behandelt intakte, deklarierte Kodierungen, keine geratenen oder beschädigten Exporte.
Funktionierende Dateien bewahren
about.sh und door-sign.txt sind bereits korrekt und benötigen keine Konvertierung. cmp vergleicht Bytes, bleibt bei Gleichheit stumm und liefert Erfolg. Beide Vergleiche sollten ohne Ausgabe enden:
cmp source/about.sh delivery/about.sh
cmp source/door-sign.txt delivery/door-sign.txt
./delivery/about.sh
cat delivery/door-sign.txt
Erwarten Sie die Beschreibung der Gemeinschaftskunst und Bienvenue · 欢迎 · ようこそ. Konvertierung folgt Belegen und einem Eingabevertrag; sie ist keine Pflichtbehandlung aller Dateien.
Das Paket übergeben und wirklich starten
Der Starter findet reader.py relativ zu sich selbst; der Leser findet entsprechend programme.txt. Wechseln Sie in ein fremdes Verzeichnis und nutzen Sie den absoluten Starterpfad. Eine nutzbare Übergabe darf weder vom Autorenverzeichnis noch von einem expliziten bash-Umweg abhängen:
cd /tmp
/home/labex/project/event/delivery/start.sh
Erwarten Sie genau die vier vollständigen Nachmittagseiträge in der ursprünglichen Reihenfolge samt Leerzeile. Sie haben die tatsächlich übergebenen Dateien benutzt. Vergleichen Sie Chloé Martín, 林雨, 佐藤葵 und João Silva; Rückgabewert null allein beweist keinen vollständigen Text.
Kehren Sie zum Projekt zurück:
cd /home/labex/project/event
Zum Wiederholen erzeugen Sie die betroffene Datei neu aus source/. Bereits konvertiertes UTF-8 nicht erneut an iconv -f UTF-16 geben: Das deklariert eine falsche Quelle. Funktionierende Dateien bewahren und nach jeder Änderung direkt starten. Andere Anwendungen können andere Kodierungen oder BOMs akzeptieren; diese Anforderungen gehören zu diesem Paket.
Zusammenfassung
Sie trennten Direktstartrechte, Shebang-Zeilenenden und Datenkodierung. Die vollständige UTF-8-Übergabe läuft und bewahrt Namen, Reihenfolge und korrekte Dateien. Die unabhängige Abendaufgabe nutzt dieselben Methoden mit anderen Quellenbelegen.



