将含非ASCII字符的内容从内存上传至GCS出现乱码问题
解决GCS上传非ASCII字符乱码问题
你的问题出在没有为GCS对象指定正确的字符编码元数据。content-encoding是用于设置压缩格式(比如gzip)的,和字符编码无关,所以修改它不会解决乱码问题。
解决方案
在调用save方法时,显式设置Content-Type元数据,指定字符集为utf-8,这样客户端读取文件时就会用UTF-8解码,避免乱码。
修改后的代码:
const uploadToGCS = async (destFileName, html, objectPrefix) => { const storage = new Storage() try { await storage .bucket(BUCKET_NAME) .file(destFileName) .save(Buffer.from(html, "utf-8"), { metadata: { contentType: 'text/html; charset=utf-8' // 根据文件类型调整,比如text/plain; charset=utf-8 } }) console.log(`uploaded ${destFileName} to ${BUCKET_NAME}.`) } catch (err) { console.error(err) } }
说明
- 如果你的文件不是HTML,而是纯文本,把
contentType改成text/plain; charset=utf-8即可,可根据实际文件类型调整对应MIME类型。 - GCS默认不会自动添加字符集信息,必须显式指定,否则客户端会使用系统默认编码(通常是ISO-8859-1)解析,导致非ASCII字符乱码。
内容的提问来源于stack exchange,提问作者kyuden
相关产品推荐
相关产品推荐

