云存储,字符串编码上传

问题描述 投票:0回答:1

我正在尝试使用

python
客户端将字符串上传到 blob。

当我在控制台中打印字符串时 - 一切都很好,当上传到存储桶时,它充满了奇怪的编码错误,例如:

I am bitterly disappointed – he should take the right to vote very seriously.

这是我的代码:

from datetime import date
from google.cloud import storage

URL_TEXT_BUCKET = 'BUCKET-NAME'

client = storage.Client()
bucket = client.get_bucket(URL_TEXT_BUCKET)

def store_url_content(text, key):
    today = str(date.today())
    blob = bucket.blob(today + '/' + key)
    blob.upload_from_string(text)

我尝试过设置

encoding_type='utf8'
,但不幸的是,文档没有说明选项或最佳实践。

编辑: 我还尝试通过调用将我的文本编码为

utf8

text = text.encode('utf8')

虽然这使查看器发生了变化,并且似乎用我认为的

bytes
替换了一些元素,并且还前置了
b
b'some text x\u023 more'
- GCS 上的最终结果是相同的。

编辑2: 问题出在 Google Console 查看器上,下载文件回来显示一切正常......

如果了解 GCP 控制台的人可以帮助解决文本无法正确呈现的原因,那就太好了。

python google-cloud-platform google-cloud-storage
1个回答
0
投票

我今天遇到了这个问题。正如您已经写的,该文件在存储桶中使用 utf-8 正确编码,但显示时带有编码伪影。

您看到的不是“Google Console 查看器”,而只是显示文件的浏览器。问题是默认上传内容类型是

text/plain
请参阅文档)。您可以通过将其传递给函数来强制使用 utf-8,例如:

blob.upload_from_string(text, content_type='text/plain; charset=utf-8')

这将使 GCS 向您的浏览器提供带有正确

Content-Type
标头的文件。

或者,Firefox 有“查看 > 修复文本编码”可供您使用。

© www.soinside.com 2019 - 2024. All rights reserved.