【问题标题】:Firebase RTDB .gzip and Node JS encodingFirebase RTDB .gzip 和 Node JS 编码
【发布时间】: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
  1. 为什么 .gzip 备份文件对重音符号进行编码?
  2. 如何以编程方式解码这些编码的重音符号? 我尝试使用节点模块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
  1. 如何从“Manuten√ß√£o”取回“Manutenção”?

谢谢!

【问题讨论】:

    标签: node.js firebase-realtime-database


    【解决方案1】:

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

    解决方案

      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;
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 2018-03-07
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      相关资源
      最近更新 更多