【问题标题】:non english characters encoding in node js节点js中的非英文字符编码
【发布时间】:2018-07-16 18:55:25
【问题描述】:

我有一个 PHP 代码和节点 js 代码,可以保存和从 MySQL 数据库获取一些信息。有些数据是外文的。所有编码(数据库、表、字段)都设置为 utf8。
如果我通过 PHP 将“якийсь текст”之类的内容发送到数据库,在数据库中它将看起来像“ÑкийÑÑŒ текÑÑ‚”,如果我使用 PHP 从数据库中检索此文本,我会得到“якийсь текст”,这很好。 但是当我使用节点将相同的文本发送到数据库时,在数据库中它将按原样保存(якийсь текст)但是当使用 PHP 从数据库中检索它时 - 我得到的只是问号。 在节点 mysql.createConnection 中,我设置了 charset: 'utf8' 并添加了 conc.query("SET NAMES utf8") 。
所以我不确定我做错了什么。
谢谢

【问题讨论】:

标签: mysql node.js encoding


【解决方案1】:

这就是 Mojibake。原因见this

这也讨论了“问号”。

既然你有两个症状,我建议你至少有两个编码错误。因此,也请参阅该链接中的“最佳实践”。

给我们看:

  • 连接字符串
  • SHOW CREATE TABLE
  • SELECT HEX(col), col FROM tbl WHERE ...

它可能是“双重编码”——这是阴险的,因为它看起来没问题,除非你比较字符串。

UTF-8 як 是十六进制 D18F D0BA。但是,如果进行双重编码,则会得到C391 C28F C390 C2BA

SET NAMES utf8 应该有所帮助;但这只是需要匹配的大约 5 件事之一。

node.js 需要类似的东西

var connection = mysql.createConnection({ ... , charset : 'utf8'});

(或 utf8mb4)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多