从Azure存储中将blob(文本文件)下载为内存为UTF8?

时间:2015-10-02 11:35:24

标签: java azure utf-8 blob

我从blob存储中下载文本文件,并且我想保留文件的内容(编码等)。

downloadText()downloadText("UTF-8",null,null,null)之间有区别吗?或者有更好的方法吗?

一些测试代码:

CloudStorageAccount storageAccount = CloudStorageAccount.parse(Blob.storageConnectionString);
        CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
        CloudBlobContainer container = blobClient.getContainerReference("myblob");

        CloudBlockBlob blob = container.getBlockBlobReference("mydir/myfile.txt");

        String txt1 = blob.downloadText();
        String txt2 = blob.downloadText("UTF-8", null, null, null); 

2 个答案:

答案 0 :(得分:2)

downloadText函数与参数或无参数的不同之处在于使用默认平台编码或使用指定的编码,您可以参考类CloudBlockBlob http://azure.github.io/azure-sdk-for-java/的javadoc。

enter image description here

根据我的经验,您可以下载文本内容blob并转换为UTF8字符串,如下面的代码所示。

InputStream input =  blob.openInputStream();
InputStreamReader inr = new InputStreamReader(input, "UTF-8");
String utf8str = org.apache.commons.io.IOUtils.toString(inr);

最诚挚的问候。

答案 1 :(得分:1)

这取决于。 charset用于将文本文件转换为字节数组(最后是blob)。因此,您应该将用于将文本文件上载的相同编码应用于blob,以便保留文件的原始上下文。当您调用不带参数的downloadText()时,java会尝试使用系统file.encoding属性中定义的默认字符编码。然而,这可能导致不希望的结果。