簡體   English   中英

從Azure存儲流Blob時如何設置編碼

[英]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編碼錯誤。 我找不到如何設置編碼。

問題似乎是在將流作為XDocument讀取時

您可以使用以下代碼將編碼設置為Encoding.GetEncoding("Windows-1252") ,以將流讀取為XDocument。

XDocument xmlDoc = null;

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

結果: 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM