【问题标题】:Actions on Google Node.js SDK unicodeGoogle Node.js SDK unicode 上的操作
【发布时间】:2018-10-18 20:37:18
【问题描述】:

如何在 Google 助理中非常简单地显示欧元符号?每次我尝试以不同的编码获得符号时。我错过了什么简单的事情?

actions-on-google SDK 版本 2.0.1

const { dialogflow } = require('actions-on-google')

const app = dialogflow({ debug: true })

app.intent('euro-intent', (conv) => {
  console.log('€')
  conv.ask('€')
})

exports.myBot = app

我的操作是调用 AWS API Gateway 上的 Webhook,该 Webhook 使用 Node.js v 8.10 连接到 Lambda 函数。 CloudWatch 日志显示

{
    "payload": {
        "google": {
            "expectUserResponse": true,
            "richResponse": {
                "items": [
                    {
                        "simpleResponse": {
                            "textToSpeech": "€"
                        }
                    }
                ]
            },
            "userStorage": "{\"data\":{}}"
        }
    },
    "outputContexts": [
        {
            "name": "projects/newagent-9bde7/agent/sessions/1525808242247/contexts/_actions_on_google",
            "lifespanCount": 99,
            "parameters": {
                "data": "{}"
            }
        }
    ]
}

但是,我在模拟器中得到以下信息。

【问题讨论】:

  • 你能不能尝试返回"\\u20ac"而不是,看看是否有帮助
  • @TarunLalwani 这会返回字符“\u20ac”,助手会将其读取为“you 20 ack”。
  • 我认为这可能是一个编码问题。我会查看标头并确保正在返回 Content-type: application/json; charset=utf-8,如果没有,则在您的 lambda 中返回带有 charsetcontent-type 标头。我会尝试的另一件事是将内容处理设置为在需要时转换为文本。我没有使用它,但不确定它会为你改变什么,i.stack.imgur.com/AMKTB.png
  • 你有机会尝试这些东西吗?

标签: node.js unicode google-assistant-sdk


【解决方案1】:

在您的 webhook 中,为 EURO SIGN 使用 unicode。 EURO SIGN 的 unicode 是 U+20AC

在您的 Node.js 实现中,使用 '\u20ac' 表示法。

在字符串值中,“\u”表示法表示该值是由四个十六进制数字表示的 unicode 字符。

这是带有 unicode 值的版本:

const { dialogflow } = require('actions-on-google')

const app = dialogflow({ debug: true })

app.intent('euro-intent', (conv) => {
  console.log('\u20ac')
  conv.ask('\u20ac')
})

exports.myBot = app

【讨论】:

  • 这会返回完全相同的“⬔字符。
  • 我已经在我的 webhook 上尝试过这个并且正在运行。它被部署到火力基地。我检查了我的手机和模拟器。当你在在线编辑器上运行 console.log('\u20ac') 时你看到了什么:repl.it/repls/MelodicWillingFunction
  • 我在在线编辑器中看到了欧元符号。也许这与 AWS 返回有效负载的方式有关?我没有使用 Firebase,而是使用 AWS API Gateway 和 Lambda 函数。
  • 也许你也可以尝试使用 ES6 的转义方式:\u{20ac} @duffn
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
相关资源
最近更新 更多