Ich versuche, einige UTF-8-Zeichen in eine LaTeX-Datei in TextMate einzugeben (die besagt, dass die Standardcodierung UTF-8 ist), aber LaTeX scheint sie nicht zu verstehen.
Beim Ausführen cat my_file.tex
werden die Zeichen im Terminal ordnungsgemäß angezeigt. Laufen ls -al
zeigt etwas, was ich noch nie gesehen habe: ein "@" in der Dateiliste:
-rw-r--r--@ 1 me users 2021 Feb 11 18:05 my_file.tex
(Und ja, ich verwende \usepackage[utf8]{inputenc}
im LaTeX.)
Ich habe es gefunden iconv
, aber das scheint mir nicht sagen zu können, was die Codierung ist - es wird erst konvertiert, wenn ich es herausgefunden habe.
Antworten:
Dies
@
bedeutet, dass der Datei erweiterte Dateiattribute zugeordnet sind. Sie können sie mit dergetxattr()
Funktion abfragen .Es gibt keine eindeutige Möglichkeit, die Codierung einer Datei zu erkennen. Lesen Sie diese Antwort, es erklärt warum.
Es gibt ein Befehlszeilenprogramm, enca , das versucht, die Codierung zu erraten. Vielleicht möchten Sie es überprüfen.
quelle
@
das Dateicodierungsattribut enthalten. Mit dem Befehl können Siexattr -p com.apple.TextEncoding <filename>
das Codierungsattribut überprüfen, falls vorhanden.ls -l@ <filename>
zu sehen, welche Attribute für die Datei festgelegt sind. Um das tatsächliche Attribut zu sehen, geben Siexattr -p com.apple.TextEncoding <filename>
enca
tunbrew install enca
und Sie müssen die Sprache angeben, aber keine funktioniert, also:enca FILENAME -L __
Die Verwendung der
-I
Option (das ist ein Großbuchstabe i) im Dateibefehl scheint die Dateicodierung anzuzeigen.quelle
file -I *
scheint perfekt für mich zu funktionieren (unter OSX). Ein System beschwerte sich über die Codierung einer von vielen Dateien, ohne anzugeben, welche. Alle Dateien waren ASCII, bis auf eine, die utf-8 war. Höchstwahrscheinlich der Schuldige.In Mac OS X
file -I
gibt Ihnen der Befehl (Großbuchstabe i) den richtigen Zeichensatz, solange die zu testende Datei Zeichen außerhalb des grundlegenden ASCII-Bereichs enthält.Wenn Sie beispielsweise in Terminal gehen und vi verwenden, um eine Datei zu erstellen, z.
vi test.txt
Fügen Sie dann einige Zeichen ein und fügen Sie ein Zeichen mit Akzent hinzu (versuchen Sie es mit ALT-e gefolgt von e). Speichern Sie dann die Datei.Sie tippen
file -I text.txt
und Sie sollten ein Ergebnis wie das folgende erhalten:test.txt: text/plain; charset=utf-8
quelle
file
Befehl seinenus-ascii
irgendwo in meiner Bash-Konfiguration als
also tippe ich einfach
Auf meinem Vanilla OSX Yosemite liefert es genauere Ergebnisse als "file -I":
quelle
Sie können auch mit dem folgenden Befehl von einem Dateityp in einen anderen konvertieren:
z.B
quelle
Benutz einfach:
Das ist es.
quelle
file -I
bekomme ichtext/plain; charset=unknown-8bit
. Obwohl es für eine utf8-Datei besser funktioniert :text/plain; charset=utf-8
.Die Verwendung eines
file
Befehls mit der--mime-encoding
Option (z. B.file --mime-encoding some_file.txt
) anstelle der Option -I funktioniert unter OS X und hat den zusätzlichen Vorteil, dass der MIME-Typ "text / plain" weggelassen wird, der Ihnen wahrscheinlich egal ist.quelle
file
Befehl gesprochen. Wusste nicht, dass es einen gibt. Anfänger. Wie auch immer. Entschuldigung für die Ablehnung. SO kann ich es nicht rückgängig machen, es sei denn, jemand bearbeitet diese Antwort.Klassisches 8-Bit-LaTeX ist stark eingeschränkt, in welchen UTF8-Zeichen es verwendet werden kann. Dies hängt stark von der Kodierung der verwendeten Schriftart und den verfügbaren Glyphen ab.
Da Sie kein bestimmtes Beispiel angeben, ist es schwierig, genau zu wissen, wo das Problem liegt - ob Sie versuchen, eine Glyphe zu verwenden, die Ihre Schriftart nicht hat, oder ob Sie in der ersten nicht die richtige Schriftkodierung verwenden Ort.
Hier ist ein minimales Beispiel, das zeigt, wie einige UTF8-Zeichen in einem LaTeX-Dokument verwendet werden können:
Sie haben vielleicht mehr Glück mit der [utf8x] -Codierung, aber seien Sie leicht gewarnt, dass sie nicht mehr unterstützt wird und im Vergleich zu [utf8] einige Besonderheiten aufweist (soweit ich mich erinnere; es ist eine Weile her, seit ich sie mir angesehen habe). Aber wenn es den Trick macht, ist das alles, was für Sie wichtig ist.
quelle
Das @ -Zeichen bedeutet, dass die Datei erweiterte Attribute hat .
xattr file
Zeigt an, welche Attribute es hat,xattr -l file
zeigt auch die Attributwerte an (die manchmal groß sein können - versuchen Sie beispielsweisexattr /System/Library/Fonts/HelveLTMM
, eine alte Schriftart zu sehen, die in der Ressourcengabel vorhanden ist).quelle
Tippen
file myfile.tex
ein Terminal können Sie manchmal die Codierung und den Dateityp mithilfe einer Reihe von Algorithmen und magischen Zahlen ermitteln. Es ist ziemlich nützlich, aber verlassen Sie sich nicht darauf, dass es konkrete oder zuverlässige Informationen liefert.Eine
Localizable.strings
Datei (in lokalisierten Mac OS X-Anwendungen enthalten) wird normalerweise als UTF-16 C-Quelldatei gemeldet.quelle
Synalyse It! ermöglicht den Vergleich von Text oder Bytes in allen Codierungen, die die ICU-Bibliothek bietet. Mit dieser Funktion sehen Sie normalerweise sofort, welche Codepage für Ihre Daten sinnvoll ist.
quelle
Sie können versuchen, die Datei in ein Firefox-Fenster zu laden, und dann zu Ansicht - Zeichenkodierung wechseln. Neben dem Codierungstyp der Datei sollte ein Häkchen stehen.
quelle
Welches LaTeX verwenden Sie? Als ich teTeX verwendete, musste ich das Unicode- Paket manuell herunterladen und zu meinen .tex-Dateien hinzufügen:
Jetzt habe ich vom TeXlive 2008-Paket ( hier ) auf XeTeX umgestellt , es ist noch einfacher:
Was die Erkennung der Codierung einer Datei angeht, könnte man damit spielen
file(1)
(aber es ist ziemlich begrenzt), aber wie jemand anderes sagte, ist es schwierig.quelle
Eine Brute-Force-Methode zum Überprüfen der Codierung besteht möglicherweise darin, die Datei in einem Hex-Editor oder ähnlichem zu überprüfen. (oder schreiben Sie ein Programm zur Überprüfung) Sehen Sie sich die Binärdaten in der Datei an. Das UTF-8-Format ist ziemlich leicht zu erkennen. Alle ASCII-Zeichen sind Einzelbytes mit Werten unter 128 (0x80). Multibyte-Sequenzen folgen dem in der Abbildung gezeigten Muster Wiki-Artikel
Wenn Sie einen einfacheren Weg finden, ein Programm zu erhalten, um die Codierung für Sie zu überprüfen, ist dies offensichtlich eine Abkürzung, aber wenn alles andere fehlschlägt, würde dies den Trick tun.
quelle
Ich habe das Bash-Skript unten implementiert, es funktioniert für mich.
Es wird zunächst versucht,
iconv
von der vonfile --mime-encoding
an zurückgegebenen Codierungutf-8
.Wenn dies fehlschlägt, werden alle Codierungen durchlaufen und der Unterschied zwischen der ursprünglichen und der neu codierten Datei angezeigt. Es werden Codierungen übersprungen, die eine große Diff-Ausgabe erzeugen ("groß", wie durch definiert
MAX_DIFF_LINES
Variable oder das zweite Eingabeargument definiert), da dies höchstwahrscheinlich die falsche Codierung ist.Wenn durch die Verwendung dieses Skripts "schlechte Dinge" passieren, beschuldigen Sie mich nicht. Da ist ein
rm -f
drin, also gibt es Monster. Ich habe versucht, nachteilige Auswirkungen zu verhindern, indem ich es für Dateien mit einem zufälligen Suffix verwendet habe, aber ich mache keine Versprechungen.Getestet auf Darwin 15.6.0.
quelle