如何将字符串转换为其真正的二进制表示形式(UTF-8 或当前使用的任何形式)?

Mar*_*arc 1 javascript c# binary utf-8 node.js

我想尝试 UTF-8 和 Unicode,为此我想建立一个小型网站来帮助我更好地理解编码。

\n\n

首先,我希望能够输入一些文本,然后获取字符串的实际二进制编码。为此,我正在从 C# 或 Java 中寻找与“.GetBytes”等效的内容。我不想要已解析的字符代码!

\n\n

这是我想在 JavaScript 中重现的 C# 函数

\n\n
string ToBinary(string input)\n{\n    //this is the part I am looking for in JavaScript\n    var utf8Bytes = Encoding.UTF8.GetBytes(input);\n\n    var bytesFormatedToBin = utf8Bytes.Select(b => Convert.ToString(b, 2).PadLeft(8, \'0\'));\n    return string.Join(\' \', bytesFormatedToBin);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里是一些示例结果:

\n\n
    \n
  • “abc”=>“01100001 01100010 01100011”
  • \n
  • "@\xc2\xa9\xc2\xae" => "01000000 11000010 10101001 11000010 10101110"
  • \n
  • "" => "11110000 10011111 10011000 10000000 11110000 10011111\n10011000 10000100"
  • \n
\n\n

有没有办法在 JavaScript 中实现这一点?

\n\n

谢谢。\n马克

\n\n

编辑:修复了截断的示例结果。

\n

R X*_* Xy 6

String.prototype.charCodeAt(...)仅当字符串仅包含 ASCII 字符时才能正常工作。你必须使用标准TextEncoder如果你想处理其他字符,

\n\n
const te = new TextEncoder(\'utf-8\')\nfunction toBinaryRepr(str) {\n    return Array.from(te.encode(str))\n        .map(i => i\n            .toString(2)\n            .padStart(8, \'0\'))\n        .join(\' \')\n}\n// \'01100001 01100010 01100011\'\ntoBinaryRepr(\'abc\')\n// \'01000000 11000010 10101001 11000010 10101110\'\ntoBinaryRepr(\'@\xc2\xa9\xc2\xae\')\n// \'11110000 10011111 10011000 10000000 11110000 10011111 10011000 10000100\'\ntoBinaryRepr(\'\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

警告:TextEncoder在旧版本的 Node.js 中不是全局构造函数 - 如果您收到一些错误消息TextEncoder未定义,请尝试通过以下方式导入它:

\n\n
const { TextEncoder } = require(\'util\')\n
Run Code Online (Sandbox Code Playgroud)\n