„Unicode“ unter Windows ist UTF-16LE, und jedes Zeichen besteht aus 2 oder 4 Bytes. Linux verwendet UTF-8 und jedes Zeichen ist zwischen 1 und 4 Byte groß.
„Das absolute Minimum, das jeder Softwareentwickler unbedingt und positiv über Unicode und Zeichensätze wissen muss (keine Ausreden!)“
Zeilenumbrüche
Windows verwendet CRLF (\r\n
, 0D 0A
) Zeilenenden, während Unix nur LF (\n
) verwendet , 0A
).
Zeichenkodierung
Die meisten modernen (d. h. seit 2004 oder so) Unix-ähnlichen Systeme machen UTF-8 zur Standardzeichenkodierung.
Windows fehlt jedoch die native Unterstützung für UTF-8. Es arbeitet intern in UTF-16 und geht davon aus, dass char
-basierte Zeichenfolgen befinden sich in einer Legacy-Codepage. Glücklicherweise kann Notepad UTF-8-Dateien lesen; leider ist die "ANSI"-Kodierung immer noch die Standardeinstellung.
Problematische Sonderzeichen
U+001A ERSATZ
Windows verwendet (selten) Ctrl +Z als Dateiendezeichen. Wenn Sie beispielsweise type
eine Datei an der Eingabeaufforderung, wird sie am ersten 1A
abgeschnitten Byte.
Unter Unix Strg +Z ist nichts besonderes.
U+FEFF NULL MIT NO-BREAK SPACE (Byte-Order Mark)
Unter Windows beginnen UTF-8-Dateien oft mit einer "Byte-Order-Marke" EF BB BF
um sie von ANSI-Dateien zu unterscheiden.
Unter Linux wird von der BOM abgeraten, da sie Dinge wie Shebang-Zeilen in Shell-Skripten unterbricht. Außerdem wäre es sinnlos, eine UTF-8-Signatur zu haben, wenn UTF-8 sowieso die Standardkodierung ist.
Ein Unterschied, den ich gehört habe, ist die Verwendung von \r\n (Windows) vs. \n für Zeilenumbrüche (Linux).
Ja. Die meisten UNIX-Texteditoren handhaben dies automatisch, Windows-Programmierer-Editoren können dies handhaben, allgemeine Texteditoren (Basis-Editor) nicht.
Windows scheint in einigen Kontexten auch das EOF (Strg-Z) als END OF FILE zu benötigen, während Sie es unter UNIX wahrscheinlich nie sehen werden.
Denken Sie daran, dass MacOS X jetzt UNIX darunter ist, also UNIX-Zeilenenden verwendet. Allerdings hatte es vor OS X (MacOS 9 und darunter) seine eigene Endung (\r)
EDIT:in anderem Format CR und LF:
- \n ist ASCII 0x0A, Zeilenvorschub (LF)
- \r ist ASCII 0x0D, Wagenrücklauf (CR)