"Unicode" en Windows es UTF-16LE y cada carácter tiene 2 o 4 bytes. Linux usa UTF-8 y cada carácter tiene entre 1 y 4 bytes.
"El mínimo absoluto que todo desarrollador de software debe conocer absoluta y positivamente sobre Unicode y conjuntos de caracteres (¡sin excusas!)"
Saltos de línea
Windows usa CRLF (\r\n
, 0D 0A
) finales de línea mientras que Unix solo usa LF (\n
, 0A
).
Codificación de caracteres
Los sistemas similares a Unix más modernos (es decir, desde 2004 más o menos) hacen que UTF-8 sea la codificación de caracteres predeterminada.
Sin embargo, Windows carece de soporte nativo para UTF-8. Funciona internamente en UTF-16 y asume que char
Las cadenas basadas en están en una página de códigos heredada. Afortunadamente, el Bloc de notas es capaz de leer archivos UTF-8; desafortunadamente, la codificación "ANSI" todavía el predeterminado.
Caracteres especiales problemáticos
U+001A SUSTITUTO
Windows (raramente) usa Ctrl +Z como carácter de fin de archivo. Por ejemplo, si type
un archivo en el símbolo del sistema, se truncará en el primer 1A
byte.
En Unix, Ctrl +Z no es nada especial.
U+FEFF CERO SIN ESPACIO SIN CORTE (Marca de orden de bytes)
En Windows, los archivos UTF-8 a menudo comienzan con una "marca de orden de bytes" EF BB BF
para distinguirlos de los archivos ANSI.
En Linux, se desaconseja la BOM porque rompe cosas como líneas shebang en scripts de shell. Además, no tendría sentido tener una firma UTF-8 cuando UTF-8 es la codificación predeterminada de todos modos.
Una diferencia que he escuchado es el uso de \r\n (Windows) vs. \n para saltos de línea (Linux).
Sí. La mayoría de los editores de texto de UNIX manejarán esto automáticamente, los editores de programadores de Windows pueden manejar esto, los editores de texto generales (Bloc de notas base) no lo harán.
Windows parece necesitar también el EOF (Ctrl-Z) como FIN DE ARCHIVO en algunos contextos, mientras que probablemente nunca lo verá en UNIX.
Recuerde que MacOS X ahora es UNIX debajo, por lo que usa finales de línea UNIX. Aunque antes de OS X (MacOS 9 y versiones anteriores) tenía su propio final (\r)
EDITAR:en otro formato CR y LF:
- \n es ASCII 0x0A, avance de línea (LF)
- \r es ASCII 0x0D, retorno de carro (CR)