从我的数据库获取以下字符串:
Johan Öbert
应该说的是:
Johan Öbert
我试图将其转换为utf-8,如下所示:
nameString.toString("utf8");
但仍然是同样的问题。
有什么想法吗?
答案 0 :(得分:27)
使用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
答案 1 :(得分:12)
我有同样的问题,当我通过fs.readFile()
加载文本文件时,我试图将编码设置为UTF8,它保持相同。我现在的解决方案是:
myString = JSON.parse( JSON.stringify( myString ) )
在此之后,Ö被真正解释为Ö。
答案 2 :(得分:5)
当您想要更改编码时,您总是会从一个变为另一个。因此,您可以从Mac Roman
转到UTF-8
或从ASCII
转到UTF-8
。
将所需的输出编码知道为当前源编码同样重要。例如,如果您有Mac Roman
并且将其从UTF-16
解码为UTF-8
,则只会使其变为乱码。
如果您想了解有关编码的更多信息,本文将详细介绍:
使用encoding或node-iconv的npm pacakge iconv-lite可让您轻松指定所需的源和输出编码:
var resultBuffer = encoding.convert(nameString, 'ASCII', 'UTF-8');
答案 3 :(得分:2)
您还可以使用Buffer类:
var someEncodedString = Buffer.from('someString', 'utf-8');
答案 4 :(得分:1)
您应该设置数据库连接的字符集,而不是在 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
答案 5 :(得分:-8)
var utf8 = require("./utf8")
console.log(utf8.encode("NEAR DAGDI CHAWL"))
//utf8.js is working properly