从容器读取Blob时出现奇怪的字符

时间:2019-01-02 17:21:10

标签: azure-powershell

我有一些包含确定或失败的文本文件已写入存储帐户。如果我将文件下载到磁盘,则内容将在记事本中按预期显示,

但是,如果我将文件内容放入一个变量中,然后Write-Host,则得到�O K

我正在这样做:

$storageContext = New-AzureStorageContext $storageAccountName $storageAccountKey
$storageContainer = "monitor"
$storageBlobs = Get-AzureStorageBlob -Container $storageContainer -Context    $storageContext

foreach($storageBlob in $storageBlobs) {
        $blobContents = $storageBlob.ICloudBlob.DownloadText()
        $blobName = $storageBlob.Name
        Write-Host $blobName
        Write-Host $blobContents
        Write-Host
  }

我认为也许我可以告诉它像这样使用UTF8:

$encoding = [System.text.Encoding]::UTF8

foreach($storageBlob in $storageBlobs) {
        $blobContents = $storageBlob.ICloudBlob.DownloadText($encoding)
        $blobName = $storageBlob.Name
        Write-Host $blobName
        Write-Host $blobContents
        Write-Host
  }

但是,这不起作用。

我现在正尝试使用.DownloadToByteArray作为ByteArray来获取它,但是我的第一次尝试是抛出错误。

为什么通过Powershell检索但在记事本中查看却没有多余的字符和空格。我认为这是一个简单的编码问题,对吗?

1 个答案:

答案 0 :(得分:0)

是的,这是一个编码问题。如果文件使用UTF8编码,则应使用UTF8对其进行解码。如果使用unicode编码,则应使用unicode对其进行解码。

然后在您的情况下,我认为它正在使用unicode。您应该使用Unicode对其进行解码,例如$encoding = [System.text.Encoding]::Unicode

我可以重现您的问题,并使用UTF8编码进行测试(不起作用),但可以使用Unicode。

UTF8:

enter image description here

Unicode:

enter image description here