为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

江户川乱折腾 2021-05-06 14:16:27
我想尝试使用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中实现这一目标?
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

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')


查看完整回答
反对 回复 2021-05-20
  • 1 回答
  • 0 关注
  • 261 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信