如何在Node js + Express(API)中将JSON TIS-620响应为UTF-8

时间:2018-09-03 09:26:13

标签: json node.js api express utf-8

我在使用tis-620以我的语言获取数据时遇到问题

[MySQL结构]

CREATE TABLE `foo` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `address` varchar(60) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=tis620

[MySQL数据]

| id |   name   |    address    |
--------------------------------|
|  1 | ทดสอบ   | 6/12 บ้านแสนดี  |

[NodeJS函数]

function getAllFoo() {
    return new Promise((resolve, reject) => {
        try {

            // Retrieving
            db.query("SELECT * FROM foo", (err, rows, fields) => {
                if(err) { throw err }
                resolve(rows)
            })

        } catch (error) {
            reject(error)
        }
    })
}

[NodeJS API]

const Foo = require('./foo')

app.get('/getFoo', (req, res) => {

    Foo.getAllFoo().then((rows) => {

         res.header("Content-Type", "application/json; charset=utf-8")
         res.status(200).json(rows)

     }).catch((err) => {
         throw err
     })

    res.status(200).json(rows);
})

然后,我尝试请求此端点/getFoo,但响应数据为:��ҹ������

[响应json数据]

[
  {
    "id" : 1,
    "name" : "��ҹ.������",
    "address" : "��ҹ������ �.� �.������"
  }
]

我将在我的PHP项目中使用的JSON结果

1 个答案:

答案 0 :(得分:0)

解决方案:

[MySQL连接]  -在mysql连接中,将charset添加到tis620,并在连接数据库时添加"SET NAMES UTF8"

var mysql      = require('mysql');

var connection = mysql.createConnection({

  host     : 'example.org',
  user     : 'bob',
  password : 'secret'
  charset  : 'tis620'

})

connection.connect(function(err) {

  if (!err) {

    connection.query("SET NAMES UTF8")

    console.log('connected as id ' + connection.threadId);

  } else {     

    console.error('error connecting: ' + err.stack);        

  }

});