【问题标题】:Firebase Java API with push utf8 string带有推送 utf8 字符串的 Firebase Java API
【发布时间】:2017-09-11 00:42:28
【问题描述】:

我正在使用java将字符串推送到firebase,代码很简单:

Map<String, Object> dataMap = new HashMap<>();
dataMap.put("title", "Khao khát cuộc sống bình thường sau Masters 2016");
firebase.post("posts", dataMap);

但是firebase上的结果是:

title: "khao kh�t cu?c s?ng b�nh th??ng sau Masters 2016"

我不想在推送到 Firebase 之前将字符串转换为字节数组。 什么是问题,我该如何解决?

谢谢。

【问题讨论】:

    标签: java utf-8 firebase firebase-realtime-database


    【解决方案1】:

    Firebase Java SDK 没有名为post() 的方法,因此我假设您正在使用其他库来写入数据库。您如何写信给 Firebase?

    我刚刚用 Java 客户端添加了相同的文本:

    Firebase ref = new Firebase("https://stackoverflow.firebaseio.com/36776859");
    Map<String, Object> dataMap = new HashMap<>();
    dataMap.put("title", "Khao khát cuộc sống bình thường sau Masters 2016");
    ref.updateChildren(dataMap);
    

    它完美地显示出来:

    {
      "title": "Khao khát cuộc sống bình thường sau Masters 2016"
    }
    

    因此,您使用的客户端很可能已经破坏了文本,或者无法将其传输到 Firebase。

    【讨论】:

    • 感谢您的回答。你用的是什么客户端?我正在使用 Brandon Gresham 的 firebase4j。而且我认为 POST - Pushing Data 仍然列在 Firebase 的 REST API 中。我也尝试使用 PUT,但结果是一样的。我使用 POST 而不是 PUT 的原因是因为在将数据保存到 Firebase 后我需要唯一 ID。
    • 我正在使用 Firebase Java SDK。请参阅this page 并找到“plain Java SDK”链接。
    【解决方案2】:

    我找到了原因。这是因为我使用的是 Java 客户端 Brandon Gresham 的 firebase4j。在该客户端中,他们使用没有设置字符集的 StringEntity。要修复它,只需添加 StandardCharsets.UTF_8

    在net/thegreshams/firebase4j/service/Firebase.java,第422行,修改:

    result = new StringEntity(jsonData);
    

    result = new StringEntity(jsonData, StandardCharsets.UTF_8);
    

    【讨论】:

    • 感谢您的更新。请记住,这是不可能从问题中得知的,因为您没有说您正在使用什么客户端库。一般来说,我强烈建议使用我链接到的 Firebase Java SDK,因为它可以防止很多这样的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 2023-03-11
    相关资源
    最近更新 更多