Solo estoy usando el juego de 128 caracteres definido en el estándar ANSI original.
Pero en general, ¿cómo están los archivos implicados de manera diferente?
No me preocupa la pantalla, es decir, si se muestra una pestaña con 6 u 8 caracteres pero la representación interna real en la memoria
Una diferencia que he escuchado es el uso de \ r \ n (Windows) vs. \ n para la terminación de línea (Linux).
Respuestas:
"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 saber absolutamente, positivamente sobre los conjuntos de caracteres y Unicode (¡sin excusas!")
fuente
Saltos de línea
Windows usa terminaciones de línea CRLF (
\r\n
,0D 0A
) mientras que Unix solo usa LF (\n
,0A
).Codificación de caracteres
Los sistemas Unix más modernos (es decir, desde 2004 más o menos) hacen que UTF-8 sea la codificación de caracteres predeterminada.
Windows, sin embargo, carece de soporte nativo para UTF-8. Funciona internamente en UTF-16 y supone que las
char
cadenas basadas 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" sigue siendo la predeterminada.Personajes especiales problemáticos
SUSTITUTO U + 001A
Windows (rara vez) usa Ctrl+ Zcomo un carácter de fin de archivo. Por ejemplo, si tiene
type
un archivo en el símbolo del sistema, se truncará en el primer1A
byte.En Unix, Ctrl+ Zno es nada especial.
U + FEFF CERO CON ESPACIO SIN FRENOS (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 lista de materiales 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.
fuente
stty
) en Linux: el controlador de la consola lo traduce al final del archivo. El carácter literal no aparece en la secuencia de entrada; solo hace que read () regrese 0.Si. 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.
Windows también parece necesitar 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 e inferior) tenía su propio final (\ r)
EDITAR: en otro formato CR y LF:
fuente
read()
devuelve cero bytes en lugar de cualquier carácter específico.La codificación Unicode utilizada no está basada en el sistema operativo.
Incluso Windows notepad.exe tiene opciones enumeradas: (pondré entre paréntesis lo que el bloc de notas quiere decir con eso) ANSI (no unicode), Unicode (el bloc de notas significa Unicode LE), Unicode Big Endian (BE), UTF-8
ANSI no es unicode, involucra un número muy limitado de caracteres, así que dejemos eso de lado.
Pero ver incluso el bloc de notas puede hacer LE, BE o UTF-8
Y aparte del bloc de notas, UTF-8 puede ser con o sin una lista de materiales.
Y uso Windows con Cygwin, aunque los puertos de Windows pueden funcionar \ r \ n incluso cuando especifique \ n. He visto sed hacer eso.
No hay una sola regla sobre qué codificación Unicode utiliza un SO en particular. No sería un sistema operativo muy flexible si lo hubiera.
Para ver realmente las diferencias, conozca el Software, qué codifica u ofrece un software.
Obtenga Cygwin y xxd, y / o un editor hexadecimal y observe lo que realmente hay dentro del archivo. Use el comando 'archivo' para ayudar a identificar un archivo. Entonces realmente ves lo que es UTF 16bit LE. Qué es UTF 16bit BE. Qué es UTF-8 (y UTF-8 puede ser con o sin una lista de materiales).
A veces puede decirle al bloc de notas que se guarde como unicode (por lo que el bloc de notas significa unicode little endian de 16 bits), y no lo hará. Pero elija una fuente Unicode como Arial Unicode, y copie algunos caracteres Unicode de Charmap y lo hará ... Y una buena manera de ver qué bloc de notas o cualquier software está haciendo, es mirando el hexadecimal de un archivo
El comando dd (un comando * nix que ejecuto desde cygwin dentro de windows) puede cambiarlo
Y el bloc de notas en sí puede guardar como UTF-16 Big Endian o UTF-16 Little Endian o UTF-8
Si eres una persona técnica o incluso un usuario de bloc de notas, ¡no estás obligado a una codificación debido a tu sistema operativo!
Supongo que UTF-8 tiene más sentido que UTF-16, UTF-16 usaría 16 bits incluso para caracteres que solo deberían necesitar 8 bits. Sin embargo, también tenga en cuenta que charmap muestra el código UTF-16.
Sublime (un editor de texto de Windows) guarda unicode como UTF-8 de forma predeterminada.
Yo uso Windows y, a veces, Unicode, y estoy usando UTF-8 principalmente.
Y como Windows es tan técnicamente flexible, ¡Linux es al menos tan técnicamente flexible!
fuente
file
ytype
dentro del indicador de Cygwin?xxd
y lostype
comandos faltan en la instalación estándar de Cygwin, supongo. Aparte de eso, quiero reproducir sus resultados.type
es un comando estándar integrado en cmd.exexxd
que probablemente no esté instalado con cygwin de manera predeterminada, pero cuando instala cygwin o después, si inicia la configuración de cygwin obtendrá una larga lista de comandos que puede instalar para usar en cygwin, y simplemente escriba xxd en el cuadro de búsqueda de configuración de cygwin y aparecerá. xxd también está disponible después de la instalación de vim7 para que pueda obtenerlo desde allí también.c:\cygwin\bin
(si ese es el subdirectorio bin de cygwin), en su ruta. También se puede ejecutar / ejecutar cualquier comando interno de cmd como 'type' o 'dir', o cualquier exe externo como calc.exe (calculadora de Windows) desde cygwin. Casi todo lo que se puede ejecutar desde cygwin se puede ejecutar desde cmd y viceversa. Si desea usar bash, use cygwin y si tiene problemas con comillas simples o dobles, ejecute los comandos cygwin dentro de cygwin y cmd dentro de cmd.echo 61|xxd -r -p>a.a
, intentarlo.type a.a
Así que en realidad puede obtener un volcado de bytes con xxd -p, reorganizar o modificar los bytes, luego alimentarlo en xxd -r -p y obtener un nuevo archivo diferente con una codificación diferente o diferentes datos basados en los datos antiguos. El comando "archivo" está descubriendo la codificación, en función de los bytes.Linux usa UTF-8, y cada carácter tiene entre 1 y 6 bytes, no entre 1 y 4 bytes.
fuente