Estou usando apenas o conjunto de 128 caracteres definido no padrão ANSI original.
Mas como um todo, como os arquivos são implementados de maneira diferente.
Não estou preocupado com a exibição, ou seja, se uma guia for exibida com 6 ou 8 caracteres, mas a representação interna real na memória
Uma diferença que ouvi é o uso de \ r \ n (Windows) vs. \ n para terminação de linha (Linux).
Respostas:
"Unicode" no Windows é UTF-16LE e cada caractere tem 2 ou 4 bytes. O Linux usa UTF-8 e cada caractere tem entre 1 e 4 bytes.
"O mínimo absoluto que todo desenvolvedor de software deve saber absolutamente, positivamente sobre Unicode e conjuntos de caracteres (sem desculpas!)"
fonte
Quebras de linha
O Windows usa terminações de linha CRLF (
\r\n
,0D 0A
) enquanto o Unix apenas usa LF (\n
,0A
).Codificação de caracteres
Os sistemas Unix mais modernos (ou seja, desde 2004 mais ou menos) fazem do UTF-8 a codificação de caracteres padrão.
O Windows, no entanto, carece de suporte nativo para UTF-8. Ele trabalha internamente em UTF-16 e assume que as
char
cadeias baseadas em estão em uma página de códigos herdada . Felizmente, o Bloco de Notas é capaz de ler arquivos UTF-8; infelizmente, a codificação "ANSI" ainda é o padrão.Caracteres Especiais Problemáticos
SUBSTITUTO U + 001A
O Windows (raramente) usa Ctrl+ Zcomo um caractere de fim de arquivo. Por exemplo, se você tiver
type
um arquivo no prompt de comando, ele será truncado no primeiro1A
byte.No Unix, Ctrl+ Znão é nada de especial.
ZERO DE FEFF U + COM ESPAÇO SEM QUEBRA (Marca de Pedido de Byte)
No Windows, os arquivos UTF-8 geralmente começam com uma "marca de ordem de bytes"
EF BB BF
para diferenciá-los dos arquivos ANSI.No Linux, a BOM é desencorajada porque quebra coisas como linhas shebang em scripts de shell. Além disso, seria inútil ter uma assinatura UTF-8 quando UTF-8 for a codificação padrão de qualquer maneira.
fonte
stty
) no Linux: o driver do console o converte no final do arquivo. O caractere literal não aparece no fluxo de entrada; ele só faz com que ler () para retornar 0.Sim. A maioria dos editores de texto do UNIX lida com isso automaticamente, os editores de programadores do Windows podem lidar com isso, os editores de texto gerais (bloco de notas básico) não.
O Windows também parece precisar do EOF (Ctrl-Z) como FIM DO ARQUIVO em alguns contextos, enquanto você provavelmente nunca o verá no UNIX.
Lembre-se de que o MacOS X agora é o UNIX abaixo e, portanto, usa as terminações da linha UNIX. Embora antes do OS X (MacOS 9 e abaixo) ele tivesse seu próprio final (\ r)
EDIT: em outro formato CR e LF:
fonte
read()
retorna zero bytes em vez de qualquer caractere específico.A codificação Unicode usada não é baseada no sistema operacional.
Até o notepad.exe do Windows tem opções listadas - (colocarei entre colchetes o que o bloco de notas significa com isso) ANSI (não unicode), Unicode (bloco de notas significa Unicode LE), Unicode Big Endian (BE), UTF-8
ANSI não é unicode, envolve um número muito limitado de caracteres, então vamos deixar isso de lado.
Mas veja até o bloco de notas pode fazer LE, ou BE, ou UTF-8
E, além do bloco de notas, o UTF-8 pode ser com ou sem uma lista técnica.
E eu uso o Windows com Cygwin, embora as portas do Windows funcionem \ r \ n mesmo quando você especificar \ n Já viu sed fazer isso.
Não há uma regra sobre qual codificação Unicode usa um sistema operacional específico. Não seria um sistema operacional muito flexível se houvesse.
Para realmente ver as diferenças, conheça o Software, que codificação um pedaço de software usa ou oferece.
Obtenha o Cygwin e o xxd e / ou um editor hexadecimal e veja o que realmente está dentro do arquivo. Use o comando 'arquivo' para ajudar a identificar um arquivo. Então você realmente vê o que é UTF 16bit LE. O que é UTF 16bit BE. O que é UTF-8 (e UTF-8 pode ser com ou sem uma BOM).
Às vezes, você pode dizer ao bloco de notas para salvar como unicode (o que significa que o bloco de notas significa unicode endian pouco de 16 bits), e não será. Mas escolha uma fonte unicode como arial unicode e copie alguns caracteres unicode do charmap e assim será. E uma boa maneira de ver o que o bloco de notas ou qualquer outro software está fazendo é observando o hexadecimal de um arquivo
O comando dd (um comando * nix que eu corro do cygwin no windows) pode alterná-lo
E o próprio bloco de notas pode salvar como UTF-16 Big Endian ou UTF-16 Little Endian ou UTF-8
Se você é um técnico ou apenas um usuário de bloco de notas, não está vinculado a uma codificação por causa do seu sistema operacional!
Suponho que UTF-8 faça mais sentido do que UTF-16, o UTF-16 usaria 16 bits, mesmo para caracteres que precisam apenas de 8 bits. Além disso, lembre-se de que o charmap mostra o código UTF-16.
Sublime (um editor de texto do Windows) salva o Unicode como UTF-8 por padrão.
Eu uso o Windows e, às vezes, unicode, e estou usando UTF-8 principalmente.
E como o Windows é tecnicamente flexível, o linux é pelo menos tecnicamente flexível!
fonte
file
etype
dentro do prompt do Cygwin?xxd
etype
comandos estão ausentes na instalação padrão do Cygwin, presumo. Além disso, quero reproduzir seus resultados.type
é um comando padrão embutido no cmd.exe,xxd
provavelmente não está instalado com o cygwin por padrão, mas quando você instala o cygwin ou depois dele, se você inicia a instalação do cygwin, obtém uma longa lista de comandos que podem ser instalados para usar no cygwin, e apenas digite xxd na caixa de pesquisa de configuração do cygwin e ele será exibido. O xxd também está disponível após a instalação do vim7, para que você possa obtê-lo também.c:\cygwin\bin
(se é onde está o subdiretório bin do cygwin) no seu caminho. Além disso, qualquer comando cmd interno como 'type' ou 'dir' ou qualquer exe externo como calc.exe (calculadora do Windows) pode ser executado / iniciado a partir do cygwin. Praticamente tudo o que pode ser executado a partir do cygwin pode ser executado a partir do cmd e vice-versa. Se você quiser usar o bash, use o cygwin e se tiver problemas com aspas simples vs duplas, execute os comandos cygwin no cygwin e cmd no cmd.echo 61|xxd -r -p>a.a
, tentartype a.a
Então, você pode obter um byte dump com xxd -p, reorganizar ou modificar os bytes, depois alimentá-lo com xxd -r -p e obter um novo arquivo diferente com uma codificação ou dados diferentes com base nos dados antigos. O comando "arquivo" está descobrindo a codificação, com base nos bytes.O Linux usa UTF-8 e cada caractere tem entre 1 e 6 bytes, não entre 1 e 4 bytes.
fonte