C# 如何在从Azure存储流blob时设置编码
我的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) 但最后我得到了一个字符串,而我的代码的其余部分需要一个流。我应该以流的形式再次读取字符串,还是存在一个更优雅的选项 这是我的密码:
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);
}