从我的数据库中获取到以下字符串:
Johan Öbert
它应该表达的是:
Johan Öbert
我已经尝试将它转换成 utf-8 格式:
nameString.toString("utf8");
但问题仍然存在。
有任何想法吗?
我建议使用Buffer
对象:
var someEncodedString = Buffer.from('someString', 'utf-8').toString();
这样做可以避免其他答案所需的任何不必要的依赖关系,因为 Buffer
已经包含在 node.js
中,并已在全局范围内定义。
Buffer.from('someString', 'your-encoding').toString('utf-8');
吗? - E.BelekovBuffer.from(fileName, 'ascii').toString('utf-8')
- undefined使用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
我遇到了同样的问题,当我通过fs.readFile()
加载文本文件时,我尝试将编码设置为UTF8,但没有起作用。我的解决方案是:
myString = JSON.parse( JSON.stringify( myString ) )
在此之后,Ö将被真正解释为Ö。
Mac Roman
转换为 UTF-8
或从 ASCII
转换为 UTF-8
。Mac Roman
,并且将其从 UTF-16
解码为 UTF-8
,那么你将只会得到乱码。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
TextEncoder(自Node.js v11起可用),以及Node的buffer
模块都可以实现此功能。
const encoder = new TextEncoder();
const bytes = encoder.encode('Johan Öbert');
const decoder = new TextDecoder('utf-8');
console.log(decoder.decode(bytes));
Buffer
就 Node 的 buffer
模块而言,UTF-8 是默认的 .toString
编码。
在转换 Buffers 和字符串之间时,可以指定字符编码。如果没有指定字符编码,默认将使用 UTF-8。 source
Buffer.from('Johan Öbert').toString();
const string = "Johan Öbert";
const utf8_buffer = Buffer.from(string, "utf8");
const utf16_buffer = Buffer.from(string, "utf16le");
string
没有任何编码。但是,你可以使用Buffer.from
轻松计算出用于构成特定编码的字节。utf8
/utf-8
,utf16le
/utf-16le
,latin1
,base64
,base64url
,hex
,以及ascii
,binary
(latin1
的别名),ucs2
/ucs-2
(utf16le
的别名)的旧版编码。// actual question is not supported by Buffer
const corrected = Buffer.from("Sm9oYW4gw5ZiZXJ0", "base64").toString();
Buffer
不支持的编码方式,但是是TextDecoder
支持的编码方式之一,你可以像下面这样做:// start with badly encoded string
const string = "Johan Öbert";
// get UTF-8 bytes that make up this string
const bytes = Buffer.from(string, "utf8");
// re-decode the bytes using the correct decoder
// NOTE: actual bad data is NOT windows-1252 (q.v. #1 above)
const corrected = new TextDecoder("windows-1252").decode(bytes);
<?xml version="1.0" encoding="UTF-8"?>
,即可进行编码。例如,在添加此代码后,任何字符都可以用于制作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>
UTF-8
格式? - robertklep