ReferenceError:找不到变量:TextEncoder

问题描述 投票:0回答:4

我在 React Native 项目中使用 VSCode/Typescript React 3.4.3,但在使用 TextEncoder 时遇到问题

ts代码:

...
var encoder = new TextEncoder();
var b: Uint8Array = encoder.encode(newName);
...

我的 tsconfig 库:

  "module": "es2015",
    "target": "es2015",
    "jsx": "react",
    "lib": ["es5", "es2017", "dom"]

此编译罚款,但在运行时尝试创建 TextEncoder 实例时失败:

“ReferenceError:找不到变量:TextEncoder”

我不明白这里出了什么问题。

任何帮助表示赞赏

编辑 1:事实是,当你调试 JS 代码时,它会在 Chrome 中运行,从而成功。但当你不这样做时,你最终会发现 JavaScriptCore 既不支持 TextEncorder 也不支持 btoa。

所以我选择支持使用 npm 模块(text-encodingbase-64):

import * as encoding from 'text-encoding';
import {encode as btoa} from 'base-64'
...
var encoder = new encoding.TextEncoder();
...
typescript react-native
4个回答
5
投票

对于那些在 2022 年仍然遇到此问题或打字稿项目遇到问题的人,请执行以下步骤:

  1. 运行:
    yarn add text-encoding
  2. 运行:
    yarn add big-integer
  3. 将以下代码添加到 App.js 或 App.tsx 中:

const TextEncodingPolyfill = require('text-encoding');
const BigInt = require('big-integer')

Object.assign(global, {
    TextEncoder: TextEncodingPolyfill.TextEncoder,
    TextDecoder: TextEncodingPolyfill.TextDecoder,
    BigInt: BigInt,
});

2
投票

我使用 stomp.js 套接字也遇到了同样的错误。

我所做的只是放

从 'text-encoding' 导入 * 作为编码;

在 App.js 中,在发布和调试中都可以正常工作


0
投票

0
投票

这个解决方案对我有用(https://github.com/awesomejerry/react-native-qrcode-svg/issues/199#issuecomment-2283588262):

导航到 node_module/qrcode/lib/core/byte-data.js 文件。

  1. 请更新以下行:

this.data = new TextEncoder().encode(data)

this.data = stringToUtf8Uint8Array(data)
.

  1. 将此功能添加到同一文件中:
function stringToUtf8Uint8Array(str) {
  const utf8 = encodeURIComponent(str)
    .replace(/%([0-9A-F]{2})/g, (_, p1) => String.fromCharCode('utf-8'));
  const arr = new Uint8Array(utf8.length);
  for (let i = 0; i < utf8.length; i++) {
    arr[i] = utf8.charCodeAt(i);
  }
  return arr;
}
© www.soinside.com 2019 - 2024. All rights reserved.