다음 단위 테스트가 실패합니다 : 그것은 밝혀CloudBlob.DownloadText 메서드는 추가 문자를 삽입합니까?
[TestMethod]
public void Add_file_to_blob_and_retrieve_it()
{
var blobName = Guid.NewGuid().ToString();
var testFileContents = File.ReadAllText(TestFileSpec);
Trace.WriteLine(string.Format("Opening blob container {0}", UnitTestBlobAgentName));
CloudStorageAccount.SetConfigurationSettingPublisher(
(configName, configSetter) => configSetter(ConfigurationManager.AppSettings[configName]));
var cloudStorage = CloudStorageAccount.FromConfigurationSetting("StorageConnectionString");
var blobClient = cloudStorage.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(UnitTestBlobAgentName.ToLower());
try
{
Trace.WriteLine(string.Format("Uploading file {0}", TestFileSpec));
var blob = container.GetBlobReference(blobName);
blob.UploadFile(TestFileSpec);
blob.Properties.ContentType = "ByteArray";
blob.SetProperties();
var blob1 = container.GetBlobReference(blobName);
var found = blob1.DownloadText();
Assert.AreEqual(testFileContents.Trim(), found.Trim());
}
finally
{
if (null != container)
{
Trace.WriteLine(string.Format("Deleting blob {0}", blobName));
var blob2 = container.GetBlobReference(blobName);
blob2.DeleteIfExists(new BlobRequestOptions { DeleteSnapshotsOption = DeleteSnapshotsOption.IncludeSnapshots });
}
}
}
, 반환 된 문자열은 DWORD 0xFEFF
(유니 코드 BOM)으로 시작한다. Microsoft 디버그 기호를 통해 추적했으며 반환 스트림에 BOM이 있습니다. AFAICT는 Microsoft.WindowsAzure.StorageClient.CloudBlob
클래스의 HttpResponse.GetResponseStream()
메서드 호출 방식에서옵니다.
입출력이 동일하도록하는 가장 좋은 방법은 무엇입니까? 들어가기 전에 입력이 유니 코드로 변환되었는지 확인 하시겠습니까? 출력에서 BOM을 제거 하시겠습니까? 다른 아이디어?
가 궁금()'와'UTF8.GetBytes()'. DownloadByteArray를 호출하는'DownloadStream()'대신'DownloadByteArray()'를 사용해 보았습니다. 그런 다음'Encoding.UTF8.GetString()'...으로 문자열로 인코딩하고 UploadByteArray() 'UploadText()'에 의해 불려진다. –
업로드/다운로드 전에 blob을 인코딩하는 다른 방법을 제안하는 "CopyBlob API의 문자 인코딩 문제"를 확인하셨습니까? http://blogs.msdn.com/b/windowsazurestorage/archive/2012/05/28/character-encoding-issues-related-to-copy-blob-api.aspx – AvkashChauhan
확장 메서드 인'DownloadString'을' CloudBlockBlob'을 호출하고'WebClient.DownloadString'에서 사용되는 것과 동일한 코드를 사용했습니다. 여기에서 코드를 찾을 수 있습니다 : [하늘색에서 텍스트를 다운로드 할 때 BOM 제거 방법] (http://www.reza-aghaei.com/how-to-get-rid-of-bom-when-downloading- text-from-azure-blob /) –