Сколько байт \ n \ r? - PullRequest
       69

Сколько байт \ n \ r?

6 голосов
/ 26 мая 2010

У меня есть приложение .NET, которое пытается ftp файл, но в итоге я получаю 1 дополнительный байт на строку. Мой разделитель строк - Environment.NewLine, который, как мне кажется, переводится в \ n \ r. Сколько это байтов?

Ответы [ 8 ]

32 голосов
/ 26 мая 2010

Зависит от кодировки. В 8-битных кодировках, как и в UTF-8, это 2 байта. В UCS-2 или UTF-16 это 4 байта. В UCS-4 или UTF-32 это 8 байтов.

Но проблема в том, что вы, вероятно, используете FTP в режиме ASCII вместо режима IMAGE.

9 голосов
/ 26 мая 2010

Это 2 байта, но оно должно быть \r\n, а не \n\r в ОС Windows

4 голосов
/ 26 мая 2010

В кодировке ASCII \ n - символ новой строки 0x0A (десятичное число 10), \ r - символ возврата каретки 0x0D (десятичное число 13).

Как уже сказал Джек, правильная последовательность - CR-LF, а не наоборот.

FTP, вероятно, добавляет символы LF в ваш поток, если они размещены неправильно и вы передаете файл в виде текста.

2 голосов
/ 26 мая 2010

Чтобы ответить на подразумеваемый вопрос:

Чтобы использовать бинарный перенос вместо ascii-переноса в C #, используйте

FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://example.com"));
reqFTP.UseBinary = true;
2 голосов
/ 26 мая 2010

Два байта. Один для \ n и один для \ r.

1 голос
/ 26 мая 2010

\ n \ r составляет 2 байта.

0 голосов
/ 11 августа 2018

Я знаю, что это старый вопрос, но ради будущих читателей; Вы можете определить, сколько байтов в данной строке (или строковом значении), с помощью следующего:

Encoding.UTF8.GetByteCount("SomeString");

В этом случае;

Encoding.Unicode.GetByteCount(Environment.NewLine);
// OR
Encoding.Unicode.GetByteCount("\n\r");

.NET использует Unicode, если не указано иное; например, с XmlSerializer вы можете указать кодировку.

Не забудьте использовать правильную кодировку, когда вы пытаетесь подсчитать количество байтов, поскольку она отличается для каждой кодировки:

  • Символ ASCII в 8-битном кодировании ASCII составляет 8 бит (1 байт), хотя он может уместиться в 7 бит.
  • Символ ISO-8895-1 в кодировке ISO-8859-1 составляет 8 бит (1 байт).
  • Символ Unicode в кодировке UTF-8 составляет от 8 бит (1 байт) до 32 бит (4 байта).
  • Символ Unicode в кодировке UTF-16 составляет от 16 (2 байта) до 32 бит (4 байта), хотя большинство общих символов занимают 16 бит. Это кодировка, используемая Windows для внутреннего использования.
  • Символ Unicode в кодировке UTF-32 всегда равен 32 битам (4 байта).
  • Символ ASCII в UTF-8 составляет 8 бит (1 байт), а в UTF-16 - 16 бит.
  • Дополнительные (не ASCII) символы в ISO-8895-1 (0xA0-0xFF) будут занимать 16 бит в UTF-8 и UTF-16.
0 голосов
/ 26 мая 2010

Программное обеспечение FTP обычно предлагает двоичный и текстовый режимы передачи. В текстовом режиме перевод новой строки происходит во время перевода. Это может быть достоверной информацией, в зависимости от вашей проблемы и причины, по которой вы задали вопрос.

...