Nodejs将字符串转换为UTF-8

时间:2013-11-24 12:08:02

标签: node.js utf-8

从我的数据库获取以下字符串:

Johan Öbert

应该说的是:

Johan Öbert

我试图将其转换为utf-8,如下所示:

nameString.toString("utf8");

但仍然是同样的问题。

有什么想法吗?

6 个答案:

答案 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

Resources

答案 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,则只会使其变为乱码。

如果您想了解有关编码的更多信息,本文将详细介绍:

What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text

使用encodingnode-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
相关问题