как декодировать китайский символ из mysql с помощью nodejs - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь запросить таблицу комментариев из базы данных mysql по языку.Всякий раз, когда я запрашиваю по языку для получения китайских комментариев, он отображает закодированные символы тарабарщины.но всякий раз, когда я использую Python для запроса, он работает.

Облачная платформа: Google Cloud SQL Расположение базы данных: Google Cloud SQL Язык программирования: Nodejs

Ниже приведен мой код

// Require process, so we can mock environment variables
  const process = require('process');
  const Knex = require('knex');
  const express = require('express');
  const app = express();

  const config = {
     user: process.env.SQL_USER,
     password: process.env.SQL_PASSWORD,
     database: process.env.SQL_DATABASE,
     socketPath: `/cloudsql/${process.env.INSTANCE_CONNECTION_NAME}`
   };


    var knex = Knex({
       client: 'mysql',
       connection: config
    });



  app.get('/', (req, res) => {
      knex.select('post')
       .from('comment')
         .where({
             'language': 'zh'
          }).limit(1).then((rows) => {
               res.send(rows);
          }).catch((err) => {
            res.send(err);
           });
     });

Это результат моего запроса:

"post": "æœ € ç ™ ½ç — ´çš„ éƒ¨é • ¿ï¼æœ € åŸºæœ¬çš „å¸¸è¯ † å '€é € »è¾'éƒ½æ²¡æœ ‰ ã €‚ çœŸä¸ ¢ äººï¼ "

пожалуйста, помогите .....

1 Ответ

0 голосов
/ 25 сентября 2018

Текст «€œ € ç ™ ½ç — ´çš„ éƒ¨é • ¿ï¼æœ € åŸºæœ¬çš „¸¸¸¸è¯ † ŒŒŒé €»"это то, что вы получаете, если" отправляется в кодировке UTF-8, но затем читается и декодируется как набор символов windows-1252.

ТамЕсть несколько разных мест, где может произойти неправильное декодирование:

  1. От клиента до приложения, записывающего в базу данных при первом добавлении данных
  2. Между приложением и MySQL при добавленииdata
  3. Через изменение конфигурации в MySQL, которое не было применено правильно.
  4. Между MySQL и приложением, читающим данные.
  5. Между приложением и конечным клиентом, отображающимданные для вас.

Для расследования я предлагаю быть систематическим.Начните с доступа к данным с помощью других инструментов, например, PHPMyAdmin или командной строки mysql в Cloud Shell.Если вы видите правильные данные, вы знаете, что проблема (4) или (5).Если база данных определенно содержит неверные данные, то это (1), (2) или (3).

Самое распространенное место возникновения этой ошибки - (5), поэтому я пойдув это немного больше.Это потому, что часто веб-сайты устанавливают набор символов на что-то неправильное или нет вообще.Чтобы это исправить, мы должны сделать набор символов явным.Вы можете сделать это в express.js, добавив:

res.set('Content-Type', 'text/plain; charset=utf-8')
...