我需要在FTP服务器上上传创建一个文件,并使用 UCS-2 LE BOM
编码。 我使用的是C#。
基于 微软的文档,我必须使用 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
将返回它。