从我的数据库im得到以下字符串:
Johan Öbert
字符串它应该说的是:
Johan Öbert
型我试着把它转换成utf-8,就像这样:
nameString.toString("utf8");
型但还是同样的问题。有什么想法吗
8wigbo561#
我推荐使用**Buffer**对象:
Buffer
var someEncodedString = Buffer.from('someString', 'utf-8').toString();
字符串这避免了其他答案所需的任何不必要的依赖关系,因为**Buffer包含在node.js**中,并且已经在全局范围中定义。
node.js
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的
nuypyhwy3#
我也遇到了同样的问题,当我通过fs.readFile()加载一个文本文件时,我试图将编码设置为UTF8,它保持不变。我现在的解决方案是:
fs.readFile()
myString = JSON.parse( JSON.stringify( myString ) )
字符串在此之后,一个Ö实际上被解释为一个Ö。
pjngdqdw4#
当你想改变编码时,你总是从一个到另一个。所以你可以从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使用node-iconv或iconv-lite的npm packakge encoding应该允许您轻松指定您想要的源和输出编码:
Mac Roman
UTF-8
ASCII
UTF-16
var resultBuffer = encoding.convert(nameString, 'ASCII', 'UTF-8');
字符串
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
goqiplq26#
TextEncoder(从Node.js v11开始可用)和Node的buffer模块都可以做到这一点。
buffer
const encoder = new TextEncoder(); const bytes = encoder.encode('Johan Öbert'); const decoder = new TextDecoder('utf-8'); console.log(decoder.decode(bytes));
在Node的buffer模块中,UTF-8是默认的.toString编码。当在Buffer和字符串之间转换时,可以指定字符编码 *。**如果没有指定字符编码,默认为UTF-8。**source
.toString
Buffer.from('Johan Öbert').toString();
型
***注意:这两个命令实际上都没有将字符串“Johan Öbert”更改为“Johan Öbert”。
xkrw2x1b7#
只要加上这个<?xml version="1.0" encoding="UTF-8"?>,就会编码。例如,在添加了
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" >....
字符串也可以添加到父布局或主应用程序。html <meta charset="utf-8" />
<meta charset="utf-8" />
<!DOCTYPE html> <html lang="en" class="overflowhere"> <head> <meta charset="utf-8" /> </head> </html>
7条答案
按热度按时间8wigbo561#
我推荐使用**
Buffer
**对象:字符串
这避免了其他答案所需的任何不必要的依赖关系,因为**
Buffer
包含在node.js
**中,并且已经在全局范围中定义。vd2z7a6w2#
使用npm的utf8模块对字符串进行编码/解码。
安装方式:
字符串
在浏览器中:
型
在Node.js中:
型
API:
编码:
型
将任何给定的JavaScript字符串(string)编码为UTF-8,并返回该字符串的UTF-8编码版本。如果输入字符串包含非标量值,即一个孤独的代孕母亲(如果您也需要能够编码非标量值,请改用WTF-8。
型
解码:
型
将任何给定的UTF-8编码字符串(byteString)解码为UTF-8,并返回该字符串的UTF-8解码版本。当检测到错误的UTF-8时,它会抛出错误。(如果您还需要能够解码编码的非标量值,请改用WTF-8。
型
Resources的
nuypyhwy3#
我也遇到了同样的问题,当我通过
fs.readFile()
加载一个文本文件时,我试图将编码设置为UTF8,它保持不变。我现在的解决方案是:字符串
在此之后,一个Ö实际上被解释为一个Ö。
pjngdqdw4#
当你想改变编码时,你总是从一个到另一个。所以你可以从
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
使用node-iconv或iconv-lite的npm packakge encoding应该允许您轻松指定您想要的源和输出编码:
字符串
5cg8jx4n5#
你应该设置数据库连接的字符集,而不是在nodejs中进行操作:
字符串
(至少在MySQL和PostgreSQL中工作)
请记住,您需要为每个连接运行该命令。如果你使用的是连接池,那么使用事件处理器来实现,例如:
型
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
goqiplq26#
TextEncoder(从Node.js v11开始可用)和Node的
buffer
模块都可以做到这一点。TextEncoder
字符串
Node.js
Buffer
在Node的
buffer
模块中,UTF-8是默认的.toString
编码。当在Buffer和字符串之间转换时,可以指定字符编码 *。**如果没有指定字符编码,默认为UTF-8。**source
型
***注意:这两个命令实际上都没有将字符串“Johan Öbert”更改为“Johan Öbert”。
xkrw2x1b7#
只要加上这个
<?xml version="1.0" encoding="UTF-8"?>
,就会编码。例如,在添加了字符串
也可以添加到父布局或主应用程序。html
<meta charset="utf-8" />
型