使用 BOM 编码上传文件

Upload file with BOM encoding

我需要 upload/create FTP 服务器上的文件 UCS-2 LE BOM 编码。我正在使用 C#。

基于Microsoft's documentation,我必须将UnicodeEncodingbigEndian:falsebyteOrderMark: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 有一个 字节顺序标记 属性,但使用它的唯一方法(除了 EqualsGetHashCode)是 GetPreamble。所有其他方法,尤其是核心方法 GetBytes 都没有。

想法是确保字节顺序标记只写在文件的开头。 UnicodeEncoding 不了解上下文。因此,如果需要,由调用者添加前导码(即字节顺序标记)。

基于这个概念,WebClient.UploadString 不能假设它正在上传文件。它可能是其他一些 Unicode 内容。所以它不添加序言。

您必须自己添加序言。 UnicodeEncoding.GetPreamble 会 return 它。