Konvertierung von Klartextdateien von ASCII nach Unicode ohne Befehl

Konvertierung von Klartextdateien von ASCII nach Unicode ohne Befehl

Warum werden ASCII-kodierte Dateien auf UTF-8 erweitert oder umgekehrt auf ASCII reduziert?

user:~$ echo 'A  B  C  |  }  ~' > ./file 
user:~$ 
user:~$ file --brief --mime ./file
text/plain; charset=us-ascii
user:~$ 
user:~$ 
user:~$ echo 'ᴁ  ♫  ⼌  

Antwort1

Ich glaube, Sie verwechseln „Kodierung“ und „Zeichensätze“.

Im ersten Fall enthält die Datei nur US-ASCII-Zeichen. Das bedeutet, dass die Datei unabhängig von den Spracheinstellungen, die Sie zur Anzeige verwenden, immer gleich aussieht.

Im zweiten Fall enthält die Datei jetzt Zeichen, die zum UTF8-Zeichensatz gehören, da Sie diese eingegeben haben.

Hier findet keine Konvertierung statt. Der Befehl informiert Sie lediglich über den Inhalt der Datei.

Antwort2

Der fileBefehl errät einfach, was in den Dateien steht, die er analysieren soll. Er führt die Analyse durch, indem er eine bestimmte Anzahl von Bytes aus dem Header einer Datei liest, manchmal in einem mehrstufigen Prozess (wenn er am Anfang einen eindeutigen Marker findet). In einer nicht strukturierten Textdatei liest er sicherlich mehr als die Anzahl der Zeichen, die in Ihrer erweiterten Datei enthalten sind ./file, also analysiert er alle Zeichen.

In Ihrem zweiten Beispiel fügen Sie einige UTF-8-Zeichen in eine Datei ein und fileschließen diese Datei auf dieser Grundlage mit dem utf-8Zeichensatz ab. Wenn Sie beispielsweise eine 900 KB große Datei mit ausschließlich ASCII-Zeichen haben und Ihre „UTF-8“-Echozeile anhängen, filewird sie dennoch als ASCII-codierte Datei gemeldet, da sie nicht bis zu den UTF-8-codierten Zeichen gelesen hat.

Der Grenzwert liegt bei etwa 100 KB

verwandte Informationen