javascript - 如何将字符串转换为真正的二进制表示形式(UTF-8 或当前使用的任何形式)?
问题描述
我想尝试 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 中实现这一点?
谢谢。马克
编辑:修复了截断的样本结果。
解决方案
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 - 重定向到新的 HTML 页面后隐藏 div
- java - 将 jdbc postgre 驱动程序添加到 jar
- excel - 不读值
- gun - 无法为 gun.user() 包含 gundb SEA?
- javascript - GraphQL - vue-apollo 包,前端不输出查询
- ats - 如何用 prfun 替换静态断言?
- json - JSON 解析错误:无法识别的令牌 '<'
- node.js - 使用 puppeteer 根据内部文本搜索元素
- python - 链表:通过在到达其中一个链表的末尾后交换它们的指针来查找 2 个链表的交集
- java - 当时间大于零时,不能在 UI 线程上调用 Await