Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在从Azure存储流blob时设置编码_C#_Azure_Azure Storage Blobs - Fatal编程技术网

C# 如何在从Azure存储流blob时设置编码

C# 如何在从Azure存储流blob时设置编码,c#,azure,azure-storage-blobs,C#,Azure,Azure Storage Blobs,我的blob存储中有一个XML文件。它包含这样的词:Družstevní。 当我使用Azure portal下载XML时,这个词仍然正确。 但是当我尝试使用DownloadToStreamAsync时,结果是Dru�斯特文� 我该如何解决这个问题 我发现DownloadTextAsync正在工作,因为我设置了编码:encoding.GetEncoding(1252) 但最后我得到了一个字符串,而我的代码的其余部分需要一个流。我应该以流的形式再次读取字符串,还是存在一个更优雅的选项 这是我的密码:

我的blob存储中有一个
XML
文件。它包含这样的词:
Družstevní
。 当我使用Azure portal下载
XML
时,这个词仍然正确。
但是当我尝试使用
DownloadToStreamAsync
时,结果是
Dru�斯特文�

我该如何解决这个问题

我发现
DownloadTextAsync
正在工作,因为我设置了编码:
encoding.GetEncoding(1252)

但最后我得到了一个字符串,而我的代码的其余部分需要一个流。我应该以流的形式再次读取字符串,还是存在一个更优雅的选项

这是我的密码:

public Task<string> DownloadAsTextAsync(string code, Encoding encoding)
{
    var blockBlob = _container.GetBlockBlobReference(code);
    var blobRequestOptions = new BlobRequestOptions
    {
        MaximumExecutionTime = TimeSpan.FromMinutes(15),
        ServerTimeout = TimeSpan.FromHours(1)
    };

    return blockBlob.DownloadTextAsync(Encoding.GetEncoding(1252), null, blobRequestOptions, null);
}

public async Task<Stream> DownloadAsStreamAsync(string code)
{
    var blockBlob = _container.GetBlockBlobReference(code);
    var blobRequestOptions = new BlobRequestOptions
        {
            MaximumExecutionTime = TimeSpan.FromMinutes(15),
            ServerTimeout = TimeSpan.FromHours(1)
        };
    var output = new MemoryStream();
    await blockBlob.DownloadToStreamAsync(output, null, blobRequestOptions, null);
    return output;
}
生成的
xmlDocument
编码错误。我找不到如何设置编码

问题似乎在于将流作为XDocument读取时

您可以使用以下代码将编码设置为
encoding.GetEncoding(“Windows-1252”)
,以将流读取为XDocument

XDocument xmlDoc = null;

using (StreamReader oReader = new StreamReader(stream, Encoding.GetEncoding("Windows-1252")))
{
    xmlDoc = XDocument.Load(oReader);
}
结果是:

您能否分享您如何使用从
下载ASSTREAMASYNC
返回的
流的代码?我想这是你需要改变的地方
Stream
只是一个二进制流,在使用流时由读者决定编码。谢谢@ZhaoxingLu Microsoft我更新了我的帖子,你说得对,流是可以的。问题似乎是当以
XDocument
的形式读取流时,很高兴听到流是好的。关于XDocument问题,我建议您创建一个新问题,因为上面的问题是关于Azure Blob存储主题的。
fileStream.Position = 0;
var xmlDocument = XDocument.Load(fileStream);
XDocument xmlDoc = null;

using (StreamReader oReader = new StreamReader(stream, Encoding.GetEncoding("Windows-1252")))
{
    xmlDoc = XDocument.Load(oReader);
}