Firebase RTDB .gzip 和 Node JS 编码

Posted

技术标签:

【中文标题】Firebase RTDB .gzip 和 Node JS 编码【英文标题】:Firebase RTDB .gzip and Node JS encoding 【发布时间】:2022-01-23 04:37:16 【问题描述】:

我正在为我的应用使用 Firebase 实时数据库。为数据库启用每日备份。 该数据库包含带有重音符号的数据,例如“Manutenção”。

如果我在 Firebase 控制台中检查此文本,它会显示为“Manutenção”。 如果我从 Firebase 控制台导出数据,它会显示为“Manutenção”。 但如果我下载备份文件 (.gzip) 并在解压后显示为“Manuten√ß√£o”。注意这里的重音编码。这个编码是根据https://string-functions.com/encodingtable.aspx?encoding=65001&decoding=10000
    为什么 .gzip 备份文件对重音符号进行编码? 如何以编程方式解码这些编码的重音符号? 我尝试使用节点模块iconv,但无法转换。
var Iconv  = require('iconv').Iconv;

var iconv = new Iconv('macintosh', 'UTF-8');
var buffer = iconv.convert('Manutenção');
console.log(buffer.toString()); // Manutenção
    如何从“Manuten√ß√£o”取回“Manutenção”?

谢谢!

【问题讨论】:

【参考方案1】:

查看线程,好像是macOS的问题

How can I convert encoding of special characters in python? How to decode these characters? á é í

解决方案

  const iconv = require('iconv-lite');
  let isMacRomanEncoded = (data.indexOf('¬') > -1) || (data.indexOf('√') > -1);
  if(isMacRomanEncoded)
    // MacRoman encoded, convert to utf-8
    let buffer = iconv.encode(data, 'MacRoman');
    return iconv.decode(buffer, 'utf-8');
  else
    // not MacRoman encoded, return the original
    return data;
  

【讨论】:

以上是关于Firebase RTDB .gzip 和 Node JS 编码的主要内容,如果未能解决你的问题,请参考以下文章

Swiftui Firebase RTDB 不会在视图中更新

本地写入带有附加侦听器的 Firebase RTDB 或 Firestore 是不是需要读取操作?

Flutter Firebase Functions:调用函数时出错

python Firebase和Gzipped旋转文件记录处理程序

在firebase上使用gzip压缩

如何从 Firebase 实时数据库中删除一些数据?