如何将 Unicode 字符转换为十六进制格式的 Unicode 代码点?
Posted
技术标签:
【中文标题】如何将 Unicode 字符转换为十六进制格式的 Unicode 代码点?【英文标题】:How can I convert Unicode characters to their Unicode codepoint in hex format? 【发布时间】:2021-07-06 14:48:43 【问题描述】:总结
我一直在尝试通过一个包含 Unicode 代码点表的数组来解决这个问题,但是它太大了,我遇到了内存错误。
到目前为止我的工作细节
我将 Typescript 与 Micro:Bit 结合使用。我有一个大型数组(128 个条目),这是我的程序所必需的。该数组存储了 unicode 表的各种十六进制表示:
let font: number[] = [0x000b6526, 0x010514bf, 0x0004d6b2, 0x0010fc21, 0x0007c20f,
0x00744107, 0x01f4111f, 0x000d909b, 0x00117041, 0x0008ceb9, 0x0008c7e0, 0x01041041, .......];
但是,将此数组存储在 Micro:bit 上会导致 021 错误(没有可用内存或 GC 中的对象过多)。 有没有我错过的存储这个数组的替代方法? 在我的程序中,我需要将此数组用作查找表,以将字符串的字符转换为相应的 unicode 字符:
let character = font[string.charCodeAt(stringPosition)]
有关如何解决此内存问题的任何想法或建议,或者是否有更好的方法来实现我在此问题标题中所述的目标?
【问题讨论】:
128整怎么大?在任何情况下,存储二进制数据数组都比存储数字数组更有效。您可能会使用较低级别的数组(developer.mozilla.org/en-US/docs/Web/javascript/Typed_arrays)。但是,你为什么要这样做?为什么不使用内置的 Javascript 工具来转换为 Unicode 代码点? 我正在编写一个用于显示的库。要在上面显示弹簧,我需要将相应的 unicode 传输给它。但是我也很困惑这么快就用完了空间。我将尝试较低级别的数组。谢谢。 我花了一些时间来帮助你,所以你能告诉我为什么你必须使用数组而不是使用内置函数来为你做到这一点免费 i> 并且肯定 FAR 更有效? (见我的回答)我是否正确,根本问题是“如何有效地将字符转换为它们的 Unicode 代码点?” 问题是我需要从上面获得准确的表示(例如 0x00117041)才能将其传输到我的显示器。据我所知,MakeCode 中没有函数“codePointAt()”。您对此有什么建议吗?codePointAt
是string
上的一个方法,它内置于Javascript。将十进制代码点转换为您需要的十六进制形式将是微不足道的。琐碎的。所以听起来你承认数组并不重要,你只需要获取任何 Unicode 字符的十六进制代码点,对吗?
【参考方案1】:
我高度怀疑这是XY Problem 的案例,您的真正的问题是:
“如何有效地将字符转换为其 Unicode 代码点?”
如果我是对的,这就是您的解决方案。将您的数组和查找替换为:
let s = 'a ? right now would be nice.'
let stringPosition = 2 // third char
let character = s.codePointAt(stringPosition) // 129347, the secret code for a stiff drink
codePointAt
是string
上的一个新的 ES6 方法。如果您的 tsconfig
具有 ES2015
(又名 ES6)作为 target
的值,它将在 Typescript 中可用。
如果您无法切换到 ES6 或更高版本,则可以通过将函数复制到代码中来使用 the Polyfill given in the MDN article on codePointAt
。
【讨论】:
以上是关于如何将 Unicode 字符转换为十六进制格式的 Unicode 代码点?的主要内容,如果未能解决你的问题,请参考以下文章
该文件含有unicode格式的字符,当文件保存为ANSI编码的文本文件时,该字符将丢失.