从容器中读取 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:
我有一些包含 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: