You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js控制台输出波斯语异常及MySQL存储乱码问题

解决Node.js控制台波斯语显示异常及MySQL存储乱码问题

一、Node.js控制台输出波斯语方向颠倒问题

终端对RTL(从右到左)语言的渲染支持不由Node.js控制,console.log仅输出原始字符,显示方向取决于终端的渲染引擎。要强制终端按RTL规则显示,可在输出文本前后添加强制RTL方向的控制字符:

// 用U+202B(强制RTL)和U+202C(恢复默认方向)包裹文本
console.log('\u202B' + "کیان" + '\u202C');

Windows终端可检查语言设置,确保开启RTL语言显示支持;Linux/macOS终端对RTL支持较好,加上控制字符即可解决问题。

二、MySQL存储波斯语变成问号的问题

核心原因是字符集不匹配,分两种场景处理:

1. 实际存储数据已变成问号(数据损坏)

这种情况是数据库、表或字段的字符集非UTF8mb4,导致波斯语字符写入时无法正确编码,直接转为问号。解决步骤:

  • 修改数据库/表的字符集为utf8mb4,排序规则推荐用utf8mb4_persian_ci(针对波斯语优化):
-- 修改数据库字符集
ALTER DATABASE your_db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_persian_ci;

-- 修改表字符集
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_persian_ci;
  • Node.js连接MySQL时,必须在配置中指定字符集为utf8mb4(以mysql2库为例):
const mysql = require('mysql2/promise');

async function connect() {
  const connection = await mysql.createConnection({
    host: 'localhost',
    user: 'your_username',
    password: 'your_password',
    database: 'your_db_name',
    charset: 'utf8mb4' // 必须指定该配置
  });
  return connection;
}

2. MySQL终端显示问号,但实际存储数据正常

这种情况是MySQL客户端字符集设置问题,数据本身无损坏,仅终端显示乱码。执行以下命令后再查询即可:

SET NAMES utf8mb4;

你提到从MySQL读取后用res.send()发送到浏览器显示正常,是因为浏览器默认支持UTF-8编码,只要读取的数据正确,就能正常渲染。

内容的提问来源于stack exchange,提问作者ikianm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:45:35