Questão Alimentações de linha (0x0A) transformadas em retornos de carro (0x0D) durante a transferência de arquivos por email


Estou enviando um arquivo por e-mail de um Mac (Snow Leopard) para outro Mac (Lion).

Acontece que todos os feeds de linha (0x0A) no arquivo se transformam em retornos de carro (0x0D), transformando efetivamente o arquivo original em um arquivo completamente diferente.

Alguma idéia de por que algo assim aconteceria?

Isso não acontece quando o remetente faz o upload do arquivo para a web e o destinatário faz o download do arquivo usando seu navegador da web. Também não acontece se o remetente primeiro ZIPs o arquivo e envia via e-mail; o destinatário obtém o arquivo original intacto depois de descompactar o arquivo ZIP. Existe algo especial sobre as transferências de e-mail que eu deveria saber?


1


origem


Você envia o arquivo como anexo ou copia e cola? - Dennis
Estou enviando como anexo. - Enchilada
Lembre-se que os Macs iniciais (pré-OSX) usavam CR como o terminador de linha. Pode haver algum tipo de conversão sorrateira acontecendo (embora eu não tenha ideia de onde exatamente). - grawity
Qual cliente de e-mail você está usando? Você já tentou o Thunderbird? - harrymc
Não tenho certeza de qual cliente de e-mail o usuário Lion está usando. De qualquer forma, não é realmente o meu problema. Eu só estou tentando entender porque algo assim aconteceria. (Veja também a minha resposta à resposta do @ Ravachol abaixo.) - Enchilada


Respostas:


Não há nada de especial sobre as transferências de e-mail que você deve conhecer.

A função normal de um cliente de email ao transmitir o arquivo é transmitir como está. A codificação do arquivo usando base64 ou qualquer outra coisa não deve implicar qualquer alteração no conteúdo do arquivo.

Evidentemente, o seu cliente de email está a fazer o seu trabalho. Ele não apenas analisou o arquivo e decidiu que ele contém texto, ele também se encarregou de normalizar o fim das linhas. Infelizmente, está arruinando o trabalho.

De acordo com Wikipedia, carriage-return é um caractere Newline para Mac OS até a versão 9. Certamente não deveria ser o caso do Snow Leopard.

Não sendo em um Mac, não posso testar nada. E como não sei qual cliente de e-mail está sendo usado, Eu não posso google para o problema. Então eu sugiro que você olhe para esse cliente de e-mail desconhecido configurações e tente encontrar alguma opção de compatibilidade com o OS-9 que foi ativada por engano, ou alguma outra configuração para transmitir arquivos como estão.


2





SMTP RFC2821, Seção 2.3.7 (encontrado Aqui) afirma o seguinte:

Comandos SMTP e, a menos que alterados por uma extensão de serviço, mensagem   dados, são transmitidos em "linhas". Linhas consistem em zero ou mais dados   caracteres terminados pela sequência caractere ASCII "CR" (valor hexadecimal   0D) seguido imediatamente pelo caractere ASCII "LF" (valor hexadecimal 0A).

Então o seu MUA deve convertê-los antes de enviar através do servidor SMTP. Lembre-se de que o SMTP foi projetado para dados de texto e, portanto, não é compatível com binários (consulte a codificação base64 para obter mais informações sobre o envio de dados binários)


2



O arquivo de anexo que enviei era de fato codificado em base64. No entanto, após cada 64 bytes, havia um feed de linha (0x0A), que representa uma nova linha no Mac OS X. A pergunta ainda é: Por que o 0x0A se transformou em 0x0D, deixando o tamanho total do byte do arquivo intacto? Eu ainda não entendi bem isso ... - Enchilada
A alimentação de linha a cada 64 bytes é normal e pode ser ignorada, já que não tem função a não ser tornar a base64 mais legível. - harrymc


Ou zip, tar, gzip, bzip ou alguma combinação desses antes de enviar o arquivo ou encontrar outro cliente de email. Claramente o que você está usando está fazendo muito trabalho.


1