上传带有BOM编码的文件

问题描述 投票:0回答:1

我需要在FTP服务器上上传创建一个文件,并使用 UCS-2 LE BOM 编码。 我使用的是C#。

基于 微软的文档,我必须使用 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. 为了测试的目的,我试着把 byteOrderMarkfalse 而我得到了同样的结果。

为什么?我错过了什么?

我知道我可以添加 '\uFEFF' 但为什么不是自动完成?

c# unicode encoding byte-order-mark
1个回答
1
投票

的接口和描述 UnicodeEncoding 在处理字节顺序标记方面可以改进。UnicodeEncoding 有一个 字节号 属性,但唯一的方法(除了 EqualsGetHashCode)使用它是 GetPreamble. 所有其他方法,特别是核心方法 GetBytes 不要。

这个想法是为了确保字节顺序标记只写在文件的开头。UnicodeEncoding 对上下文一无所知。所以如果需要的话,由调用者来添加前言(即字节顺序标记)。

基于这个概念。WebClient.UploadString 不能认为是在上传文件。可能是一些其他的Unicode内容。所以它不会添加前言。

你必须自己添加前言。UnicodeEncoding.GetPreamble 将返回它。

© www.soinside.com 2019 - 2024. All rights reserved.