15

我正在 Linux 上的 Firefox - 24 中编写一个简单的插件。我得到错误:

ReferenceError: TextEncoder is not defined

当我这样做时: var encoder = new TextEncoder(); 我正在使用的功能是:

function write_text(filename, text) {
    var encoder = new TextEncoder();
    var data = encoder.encode(text);
    Task.spawn(function() {
       let pfh =  OS.File.open("/tmp/foo", {append: true});
       yield pfh.write(text);
       yield pfh.flush();
       yield pfh.close(); 
    });
}
4

15 回答 15

28

如果您在运行节点服务器时遇到此错误

找到这个文件node_modules/whatwg-url/dist/encoding.js

在顶部添加这一行const { TextEncoder, TextDecoder } = require("util");

于 2021-09-22T15:54:13.300 回答
21

在 nodejs 中,您可以使用 util 解决:

var util= require('util');
var encoder = new util.TextEncoder('utf-8');
于 2019-05-14T10:21:12.547 回答
7

如果您因为使用 Mongodb 而遇到这种情况,npm install mongodb那么最简单的方法就是升级您的节点版本。需要高于12版本;我使用了 16 版,它清楚地解决了我的问题

于 2021-10-13T08:38:25.180 回答
6

啊,您正在使用 SDK,我在重新阅读您的其他问题的实际错误时收集到。

  • 您需要TextEncoder从其他模块显式导入,因为 SDK 模块缺少该类。
  • 您需要yieldOS.File.open。
  • append:仅在 Firefox 27+ 中受支持
  • .flush()仅在 Firefox 27+ 中受支持(无论如何都是个坏主意)。.writeAtomic如果需要,请使用。
  • write: true要写入一个文件。

这是我在 Firefox 25 ( main.js)中测试的完整的工作示例

const {Cu} = require("chrome");
// It is important to load TextEncoder like this using Cu.import()
// You cannot load it by just |Cu.import("resource://gre/modules/osfile.jsm");|
const {TextEncoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
const {Task} = Cu.import("resource://gre/modules/Task.jsm", {});

function write_text(filename, text) {
    var encoder = new TextEncoder();
    var data = encoder.encode(text);
    filename = OS.Path.join(OS.Constants.Path.tmpDir, filename);
    Task.spawn(function() {
       let file = yield OS.File.open(filename, {write: true});
       yield file.write(data);
       yield file.close(); 
       console.log("written to", filename);
    }).then(null, function(e) console.error(e));
}

write_text("foo", "some text");
于 2013-10-31T08:20:19.867 回答
3

我也遇到了这个错误,所以我以这种方式解决了它,在 nodejs 项目中转到 node_modules/whatwg-url/dist/encoding.js 文件中添加这一行 =>

const {TextDecoder, TextEncoder} = require("util");

你的问题就解决了

于 2021-09-09T14:08:43.573 回答
2

Node.js可以在util 模块中找到文本编码器。您可以像这样访问它:

const util = require('util');
const TextEncoder = new util.TextEncoder();

的作用之一TextEncoder是将文本字符串转换为字节数组。您可以这样实现:

const data = TextEncoder.encode(
   JSON.stringify({ c: "Green" })
);
// Uint8Array [ 123, 34, 99, 34, 58, 34, 71, 114, 101, 101, 110, 34, 125 ]

返回的数组称为 a Uint8Array。它由 0 到 255 范围内的整数组成。

注意TextEncoder只支持UTF-8编码。

于 2021-08-22T12:32:31.703 回答
2

如果 node_modules/whatwg_url/dist/encoding.js 文件夹中有错误,则卸载 MongoDB

npm uninstall mongodb

并重新安装

npm install --save mongodb
于 2021-08-27T07:21:02.003 回答
1

TextEncoder可以在模块sdk/io/buffer中找到:

let { TextEncoder, TextDecoder } = require('sdk/io/buffer')
于 2013-10-31T22:55:38.523 回答
1

我在我的项目中也遇到了同样的问题,但我通过将节点版本10升级到12解决了这个问题。由于我们在项目中使用的节点版本较低,现在可能会出现这个问题。

于 2022-01-06T11:34:06.377 回答
1

对我来说,升级 Node.js 版本解决了这个问题

于 2022-01-23T08:01:30.383 回答
1

这看起来像一个节点版本错误,因为我通过从 10 更新到 16 解决了它,然后我安装了依赖项并打开了一个新终端。

  1. 将节点更新到 14 或更高,我使用了节点版本管理器 (NVM)

  2. 删除 node_modules 目录,在 linux 上:

    rm -rf 节点模块

  3. 使用 npm install 安装依赖项

  4. 关闭并打开一个新终端

  5. 使用 node 或 nodemon 运行应用程序

完毕!

于 2022-01-22T13:09:03.613 回答
0

TextEncoder 是 javascript 中的原生函数,请检查适合该能力的版本。

https://developer.mozilla.org/en-US/docs/Web/API/TextEncoder#browser_compatibility

Chrome 版本 >=38,Edge 版本 >=79,Firefox 版本 >=18,Node 版本 >=11.0.0...

于 2022-01-10T04:22:32.147 回答
0
  1. 此问题仅在节点 10 或更低版本中出现。解决这个问题upgrade node version to 12 or higher,然后rm -rf node_modules && npm i

  2. 或者如果您不想升级节点版本,那么,

    找到这个文件

    node_modules/whatwg-url/dist/encoding.js // If dist folder
    
    node_modules/whatwg-url/lib/encoding.js // If lib folder
    

    并在 encoding.js 文件中添加这一行

    const { TextEncoder, TextDecoder } = require("./utils"); // if utils file
    
    const { TextEncoder, TextDecoder } = require("./util"); // if util file
    
于 2022-02-23T05:58:49.050 回答
0

由于必须安装旧的nodejs,我遇到了同样的错误。这个问题可以通过安装最新的nodejs来解决。将 nodejs 更新到 nodejs 到 14.x

sudo apt update curl -sL https://deb.nodesource.com/setup_14.x | sudo bash - sudo apt install -y nodejs node -v

于 2022-01-31T02:56:33.487 回答
0

删除你的“node_modules”文件夹

rm -rf node_modules

然后重新安装依赖项

npm i

如果您使用的 'mongoose' 大于 v6,则至少需要 Node.js v12

于 2022-01-21T18:07:19.557 回答