![](/img/trans.png)
[英]How to stream binary file from the Blob Storage through Azure Function
[英]How to set encoding when stream blob from Azure Storage
我的Blob存儲中有一個XML
文件。 它包含這樣的單詞: Družstevní
。 當我使用Azure門戶下載XML
,這個詞仍然正確。
但是當我嘗試使用DownloadToStreamAsync
,結果是Dru stevn
。
我該如何解決?
我發現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;
}
編輯 ,在對肇星路發表評論后:
我更改了單元測試,並將編碼添加到StreamReader,現在單元測試通過了:
using (var streamReader = new StreamReader(stream, Encoding.GetEncoding(1252)))
{
string line;
while ((line = streamReader.ReadLine()) != null)
{
if (!line.StartsWith(" <Str>Dru")) continue;
Debug.WriteLine(line);
var street = line.Trim().Replace("<Str>", "").Replace("</Str>", "");
Assert.AreEqual("Družstevní", street);
}
}
但是在我的“真實”代碼中,我正在發送流以XML
加載:
fileStream.Position = 0;
var xmlDocument = XDocument.Load(fileStream);
生成的xmlDocument
編碼錯誤。 我找不到如何設置編碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.