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

标签 javascript c# node.js utf-8 binary

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

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

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

string ToBinary(string input)
{
    //this is the part I am looking for in JavaScript
    var utf8Bytes = Encoding.UTF8.GetBytes(input);

    var bytesFormatedToBin = utf8Bytes.Select(b => Convert.ToString(b, 2).PadLeft(8, '0'));
    return string.Join(' ', bytesFormatedToBin);
}

这里是一些示例结果:

  • "abc"=> "01100001 01100010 01100011"
  • "@©®"=> "01000000 11000010 10101001 11000010 10101110"
  • "😀😄"=> "11110000 10011111 10011000 10000000 11110000 10011111 10011000 10000100"

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

谢谢。 马克

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

最佳答案

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

const te = new TextEncoder('utf-8')
function toBinaryRepr(str) {
    return Array.from(te.encode(str))
        .map(i => i
            .toString(2)
            .padStart(8, '0'))
        .join(' ')
}
// '01100001 01100010 01100011'
toBinaryRepr('abc')
// '01000000 11000010 10101001 11000010 10101110'
toBinaryRepr('@©®')
// '11110000 10011111 10011000 10000000 11110000 10011111 10011000 10000100'
toBinaryRepr('😀😄')

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

const { TextEncoder } = require('util')

关于javascript - 如何将字符串转换为真正的二进制表示形式(UTF-8 或当前使用的任何格式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55955730/

相关文章:

javascript - Knockout - 显示 javascript,而不是数据绑定(bind)值

javascript - 如果元素的内容等于指定值,则将类添加到元素

c# - 如何实现一个事件类

node.js - 抓取网页并通过单击按钮进行导航

javascript - 离开页面时如何使用JS/jquery进行确认

javascript - 下拉选择和向下箭头汽车引用文本长度

c# - 使用 FlaUI 为电影和电视设置滚动百分比

c# - 对象引用未设置到对象(IP 地址比较)

javascript - 在 Node.js 中解析获取 JSON 子对象内容

node.js - 什么是 cnpm?如何使用它?