Nodejs将字符串转换为UTF-8

wj8zmpe1  于 2023-08-04  发布在  Node.js
关注(0)|答案(7)|浏览(229)

从我的数据库im得到以下字符串:

Johan Öbert

字符串
它应该说的是:

Johan Öbert


我试着把它转换成utf-8,就像这样:

nameString.toString("utf8");


但还是同样的问题。
有什么想法吗

8wigbo56

8wigbo561#

我推荐使用**Buffer**对象:

var someEncodedString = Buffer.from('someString', 'utf-8').toString();

字符串
这避免了其他答案所需的任何不必要的依赖关系,因为**Buffer包含在node.js**中,并且已经在全局范围中定义。

vd2z7a6w

vd2z7a6w2#

使用npm的utf8模块对字符串进行编码/解码。
安装方式:

npm install utf8

字符串
在浏览器中:

<script src="utf8.js"></script>


在Node.js中:

const utf8 = require('utf8');


API:
编码:

utf8.encode(string)


将任何给定的JavaScript字符串(string)编码为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

nuypyhwy

nuypyhwy3#

我也遇到了同样的问题,当我通过fs.readFile()加载一个文本文件时,我试图将编码设置为UTF8,它保持不变。我现在的解决方案是:

myString = JSON.parse( JSON.stringify( myString ) )

字符串
在此之后,一个Ö实际上被解释为一个Ö。

pjngdqdw

pjngdqdw4#

当你想改变编码时,你总是从一个到另一个。所以你可以从Mac RomanUTF-8,或者从ASCIIUTF-8
知道所需的输出编码和当前源编码一样重要。例如,如果你有Mac Roman,你把它从UTF-16解码成UTF-8,你只会让它变得乱码。
如果你想了解更多关于编码的信息,这篇文章会有很多细节:
What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text
使用node-iconviconv-lite的npm packakge encoding应该允许您轻松指定您想要的源和输出编码:

var resultBuffer = encoding.convert(nameString, 'ASCII', 'UTF-8');

字符串

5cg8jx4n

5cg8jx4n5#

你应该设置数据库连接的字符集,而不是在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-configurationhttps://www.postgresql.org/docs/current/multibyte.html#id-1.6.10.5.7https://www.npmjs.com/package/mysql#connection

goqiplq2

goqiplq26#

TextEncoder(从Node.js v11开始可用)和Node的buffer模块都可以做到这一点。

TextEncoder

const encoder = new TextEncoder();
const bytes = encoder.encode('Johan Öbert');
const decoder = new TextDecoder('utf-8');
console.log(decoder.decode(bytes));

字符串

Node.js Buffer

在Node的buffer模块中,UTF-8是默认的.toString编码。
当在Buffer和字符串之间转换时,可以指定字符编码 *。**如果没有指定字符编码,默认为UTF-8。**source

Buffer.from('Johan Öbert').toString();

***注意:这两个命令实际上都没有将字符串“Johan Öbert”更改为“Johan Öbert”。

xkrw2x1b

xkrw2x1b7#

只要加上这个<?xml version="1.0" encoding="UTF-8"?>,就会编码。例如,在添加了

<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
    >....

字符串
也可以添加到父布局或主应用程序。html <meta charset="utf-8" />

<!DOCTYPE html>
<html lang="en" class="overflowhere">
    <head>
        <meta charset="utf-8" />

    </head>
</html>

相关问题