【发布时间】:2013-11-24 12:08:02
【问题描述】:
从我的数据库中得到以下字符串:
Johan Öbert
应该说的是:
Johan Öbert
我尝试将其转换为 utf-8,如下所示:
nameString.toString("utf8");
但还是同样的问题。
有什么想法吗?
【问题讨论】:
-
让你的数据库返回
UTF-8?
从我的数据库中得到以下字符串:
Johan Öbert
应该说的是:
Johan Öbert
我尝试将其转换为 utf-8,如下所示:
nameString.toString("utf8");
但还是同样的问题。
有什么想法吗?
【问题讨论】:
UTF-8?
我建议使用 Buffer 对象:
var someEncodedString = Buffer.from('someString', 'utf-8').toString();
这避免了其他答案所需的任何不必要的依赖,因为 Buffer 包含在 node.js 中,并且已在全局范围内定义。
【讨论】:
使用 npm 中的 utf8 模块对字符串进行编码/解码。
安装:
npm install utf8
在浏览器中:
<script src="utf8.js"></script>
在 Node.js 中:
const utf8 = require('utf8');
API:
编码:
utf8.encode(string)
将任何给定的 JavaScript 字符串(字符串)编码为 UTF-8,并返回字符串的 UTF-8 编码版本。如果输入字符串包含非标量值,即单独的代理项,则会引发错误。 (如果您还需要能够编码非标量值,请改用 WTF-8。)
// U+00A9 COPYRIGHT SIGN; see http://codepoints.net/U+00A9
utf8.encode('\xA9');
// → '\xC2\xA9'
// U+10001 LINEAR B SYLLABLE B038 E; see http://codepoints.net/U+10001
utf8.encode('\uD800\uDC01');
// → '\xF0\x90\x80\x81'
解码:
utf8.decode(byteString)
将任何给定的 UTF-8 编码字符串 (byteString) 解码为 UTF-8,并返回字符串的 UTF-8 解码版本。检测到格式错误的 UTF-8 时会引发错误。 (如果您还需要能够解码编码的非标量值,请改用 WTF-8。)
utf8.decode('\xC2\xA9');
// → '\xA9'
utf8.decode('\xF0\x90\x80\x81');
// → '\uD800\uDC01'
// → U+10001 LINEAR B SYLLABLE B038 E
【讨论】:
Buffer.from 和StringDecoder?
我遇到了同样的问题,当我通过fs.readFile() 加载文本文件时,我尝试将编码设置为 UTF8,它保持不变。我现在的解决方案是:
myString = JSON.parse( JSON.stringify( myString ) )
在此之后,一个 Ö 真正被解释为一个 Ö。
【讨论】:
当您想要更改编码时,您总是会从一种编码变为另一种编码。所以你可能会从Mac Roman 到UTF-8 或从ASCII 到UTF-8。
了解所需的输出编码与了解当前源编码一样重要。例如,如果您有Mac Roman,并且您将其从UTF-16 解码为UTF-8,您只会让它出现乱码。
如果您想了解有关编码的更多信息,本文将详细介绍:
使用 node-iconv 或 iconv-lite 的 npm pacakge encoding 应该允许您轻松指定所需的源和输出编码:
var resultBuffer = encoding.convert(nameString, 'ASCII', 'UTF-8');
【讨论】:
您应该设置数据库连接的字符集,而不是在 nodejs 中与之对抗:
SET NAMES 'utf8';
(至少在 MySQL 和 PostgreSQL 中有效)
请记住,您需要为每个连接运行它。如果您使用的是连接池,请使用事件处理程序,例如:
mysqlPool.on('connection', function (connection) {
connection.query("SET NAMES 'utf8'")
});
https://dev.mysql.com/doc/refman/8.0/en/charset-connection.html#charset-connection-client-configuration https://www.postgresql.org/docs/current/multibyte.html#id-1.6.10.5.7 https://www.npmjs.com/package/mysql#connection
【讨论】:
只需添加此<?xml version="1.0" encoding="UTF-8"?>,即可进行编码。例如,添加 this 后将使用任何 char 生成 RSS
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
>....
同时添加到您的父布局或主 app.html <meta charset="utf-8" />
<!DOCTYPE html>
<html lang="en" class="overflowhere">
<head>
<meta charset="utf-8" />
</head>
</html>
【讨论】: