我有一个试图ftp文件的.NET应用程序,但我最终每行增加1个字节。我的行分隔符是Environment.NewLine,我认为它转换为\ n \ r。这是多少字节?
答案 0 :(得分:32)
这取决于编码。在8位编码以及UTF-8中,它是2个字节。在UCS-2或UTF-16中,它是4个字节。在UCS-4或UTF-32中,它是8个字节。
但问题是你可能在ASCII模式而不是图像模式下进行FTP操作。
答案 1 :(得分:9)
它是2个字节,但在Windows操作系统上它应该是\r\n
而不是\n\r
答案 2 :(得分:4)
在ASCII编码中,\ n是换行符0x0A(十进制10),\ r是回车符0x0D(十进制13)。
正如杰克所说,正确的序列是CR-LF,反之亦然。
FTP可能会在您的流中添加LF字符,如果它们放置不正确并且您将文件作为文本传输。
答案 3 :(得分:2)
两个字节。一个用于\ n,一个用于\ r。
答案 4 :(得分:2)
回答隐含的问题:
要在C#中使用二进制传输而不是ascii-transfer,请使用
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://example.com"));
reqFTP.UseBinary = true;
答案 5 :(得分:1)
\ n \ r \ n是2个字节。
答案 6 :(得分:0)
FTP软件通常提供二进制和文本传输模式。在文本模式下,换行期间会进行换行。这可能是有效的信息,具体取决于您的问题以及您提出问题的原因。
答案 7 :(得分:0)
我知道这是一个老问题,但是为了将来的读者;您可以通过以下方法确定给定字符串(或字符串值)中有多少个字节:
Encoding.UTF8.GetByteCount("SomeString");
在这种情况下;
Encoding.Unicode.GetByteCount(Environment.NewLine);
// OR
Encoding.Unicode.GetByteCount("\n\r");
除非另有说明,否则 .NET使用Unicode
;例如,使用XmlSerializer
可以指定编码。
请记住在尝试计算字节数时使用正确的编码,因为每种编码的字节数都不相同
- 采用8位ASCII编码的ASCII字符为8位(1字节),尽管可以容纳7位。
- 采用ISO-8859-1编码的ISO-8895-1字符为8位(1字节)。
- 采用UTF-8编码的Unicode字符介于8位(1字节)和32位(4字节)之间。
- 采用UTF-16编码的Unicode字符在16(2字节)和32位(4字节)之间,尽管大多数常见字符占用16位。这是Windows内部使用的编码。
- 采用UTF-32编码的Unicode字符始终为32位(4字节)。
- UTF-8中的ASCII字符为8位(1字节),而UTF-16中的ASCII字符为16位。
- ISO-8895-1(0xA0-0xFF)中的其他(非ASCII)字符在UTF-8和UTF-16中将占用16位。