У меня есть приложение .NET, которое пытается передать файл по ftp, но в итоге получается 1 дополнительный байт на строку. Мой разделитель строк — Environment.NewLine, который, как мне кажется, переводится как \n\r. Сколько это байт?
Сколько байтов составляет \n\r?
Ответы (8)
Это зависит от кодировки. В 8-битных кодировках, а также в UTF-8 это 2 байта. В UCS-2 или UTF-16 это 4 байта. В UCS-4 или UTF-32 это 8 байт.
Но проблема в том, что вы, вероятно, используете FTP в режиме ASCII, а не в режиме IMAGE.
Это 2 байта, но это должно быть \r\n
, а не \n\r
в ОС Windows.
В кодировке ASCII \n — это символ новой строки 0x0A (десятичное число 10), \r — символ возврата каретки 0x0D (десятичное число 13).
Как уже сказал Джек, правильная последовательность — CR-LF, а не наоборот.
FTP, вероятно, добавляет символы LF в ваш поток, если они размещены неправильно, и вы передаете файл как текст.
Два байта. Один для \n и один для \r.
Чтобы ответить на подразумеваемый вопрос:
Чтобы использовать двоичную передачу, а не передачу ascii в C#, используйте
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://example.com"));
reqFTP.UseBinary = true;
\n\r составляет 2 байта.
Я знаю, что это старый вопрос, но ради будущих читателей; вы можете определить, сколько байтов находится в данной строке (или строковом значении) с помощью следующего:
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.
Программное обеспечение FTP обычно предлагает двоичный и текстовый режимы передачи. В текстовом режиме перевод строки происходит во время передачи. Это может быть достоверной информацией, в зависимости от того, в чем заключается ваша проблема и почему вы задали вопрос.