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

Weird Characters when reading Blob from Container

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

但是,如果我将文件内容保存到一个变量中 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 检索时有多余的字符和空格,但在记事本中查看时却没有。我认为这是一个简单的编码问题是否正确?

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

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

我可以重现您的问题,并使用 UTF8 编码对其进行测试(无效),但适用于 Unicode。

UTF8:

Unicode: