"Unicode" sous Windows est UTF-16LE, et chaque caractère est de 2 ou 4 octets. Linux utilise UTF-8 et chaque caractère est compris entre 1 et 4 octets.
"Le minimum absolu que chaque développeur de logiciel doit absolument, positivement, connaître sur Unicode et les jeux de caractères (aucune excuse !)"
Sauts de ligne
Windows utilise CRLF (\r\n
, 0D 0A
) les fins de ligne alors qu'Unix utilise juste LF (\n
, 0A
).
Encodage des caractères
La plupart des systèmes de type Unix modernes (c'est-à-dire depuis 2004 environ) font d'UTF-8 l'encodage de caractères par défaut.
Windows, cependant, ne prend pas en charge nativement UTF-8. Il fonctionne en interne en UTF-16 et suppose que char
Les chaînes basées sur sont dans une page de code héritée. Heureusement, le Bloc-notes est capable de lire les fichiers UTF-8; malheureusement, l'encodage "ANSI" est toujours la valeur par défaut.
Caractères spéciaux problématiques
U+001A SUBSTITUT
Windows utilise (rarement) Ctrl +Z comme caractère de fin de fichier. Par exemple, si vous type
un fichier à l'invite de commande, il sera tronqué au premier 1A
octet.
Sous Unix, Ctrl +Z n'a rien de spécial.
U+FEFF ZÉRO AVEC ESPACE SANS SÉCURITÉ (Marque d'ordre d'octet)
Sous Windows, les fichiers UTF-8 commencent souvent par une "marque d'ordre d'octet" EF BB BF
pour les distinguer des fichiers ANSI.
Sous Linux, la nomenclature est déconseillée car elle casse des choses comme les lignes shebang dans les scripts shell. De plus, il serait inutile d'avoir une signature UTF-8 alors que UTF-8 est de toute façon l'encodage par défaut.
Une différence que j'ai entendue est l'utilisation de \r\n (Windows) par rapport à \n pour les sauts de ligne (Linux).
Oui. La plupart des éditeurs de texte UNIX gèrent cela automatiquement, les éditeurs de programmeurs Windows peuvent le faire, les éditeurs de texte généraux (le bloc-notes de base) ne le feront pas.
Windows semble également avoir besoin de l'EOF (Ctrl-Z) comme FIN DE FICHIER dans certains contextes, alors que vous ne le verrez probablement jamais sous UNIX.
N'oubliez pas que MacOS X est maintenant UNIX en dessous, il utilise donc les fins de ligne UNIX. Bien qu'avant OS X (MacOS 9 et inférieur), il avait sa propre fin (\r)
EDIT :dans un autre format CR et LF :
- \n est ASCII 0x0A, saut de ligne (LF)
- \r est ASCII 0x0D, retour chariot (CR)