使用 BOM 编码上传文件
Upload file with BOM encoding
我需要 upload/create FTP 服务器上的文件 UCS-2 LE BOM
编码。我正在使用 C#。
基于Microsoft's documentation,我必须将UnicodeEncoding
与bigEndian:false
和byteOrderMark:true
一起使用。这是代码:
using (WebClient client = new WebClient())
{
client.Encoding = new UnicodeEncoding(false, true);
client.Credentials = myCredentials;
client.UploadString(path, WebRequestMethods.Ftp.UploadFile, myCsvInString);
}
在FTP服务器上创建的文件实际上有UCS-2 Little Endian
。出于测试目的,我尝试将 byteOrderMark
切换为 false
,我得到了相同的结果。
为什么?我错过了什么?
我知道我可以添加 '\uFEFF'
但为什么它没有自动完成?
关于字节顺序标记的处理,UnicodeEncoding
的接口和描述可以改进。 UnicodeEncoding
有一个 字节顺序标记 属性,但使用它的唯一方法(除了 Equals
和 GetHashCode
)是 GetPreamble
。所有其他方法,尤其是核心方法 GetBytes
都没有。
想法是确保字节顺序标记只写在文件的开头。 UnicodeEncoding
不了解上下文。因此,如果需要,由调用者添加前导码(即字节顺序标记)。
基于这个概念,WebClient.UploadString
不能假设它正在上传文件。它可能是其他一些 Unicode 内容。所以它不添加序言。
您必须自己添加序言。 UnicodeEncoding.GetPreamble
会 return 它。
我需要 upload/create FTP 服务器上的文件 UCS-2 LE BOM
编码。我正在使用 C#。
基于Microsoft's documentation,我必须将UnicodeEncoding
与bigEndian:false
和byteOrderMark:true
一起使用。这是代码:
using (WebClient client = new WebClient())
{
client.Encoding = new UnicodeEncoding(false, true);
client.Credentials = myCredentials;
client.UploadString(path, WebRequestMethods.Ftp.UploadFile, myCsvInString);
}
在FTP服务器上创建的文件实际上有UCS-2 Little Endian
。出于测试目的,我尝试将 byteOrderMark
切换为 false
,我得到了相同的结果。
为什么?我错过了什么?
我知道我可以添加 '\uFEFF'
但为什么它没有自动完成?
关于字节顺序标记的处理,UnicodeEncoding
的接口和描述可以改进。 UnicodeEncoding
有一个 字节顺序标记 属性,但使用它的唯一方法(除了 Equals
和 GetHashCode
)是 GetPreamble
。所有其他方法,尤其是核心方法 GetBytes
都没有。
想法是确保字节顺序标记只写在文件的开头。 UnicodeEncoding
不了解上下文。因此,如果需要,由调用者添加前导码(即字节顺序标记)。
基于这个概念,WebClient.UploadString
不能假设它正在上传文件。它可能是其他一些 Unicode 内容。所以它不添加序言。
您必须自己添加序言。 UnicodeEncoding.GetPreamble
会 return 它。