delphi - 如何将 4 字节字符串转换为 unicode 表情符号?
问题描述
我在 Delphi 10.3 中使用的 Web 服务返回一个由这四个字节组成的字符串: F0 9F 99 82 。我期待一个略带微笑的表情符号。该站点将此字节序列显示为该表情符号的 UTF-8 表示。所以我想我的字符串中有一个 UTF-8 表示,但它是一个实际的 unicode 字符串?如何将我的字符串转换为实际的 unicode 表示形式,以显示它,例如,在 TMemo 中?
解决方案
该字符具有Unicode代码点U+1F642。显示文本是通过编码定义的:必须如何解释一组字节:
- 在UTF - 8中,一个字符可以由8、16、24或 32 位(1 到 4
Byte
秒)组成;这个是$F0 $9F $99 $82
。 - 在UTF - 16中,一个字符可以包含16或 32 位(2 或 4 字节 = 1 或 2
Word
秒);这个是$D83D $DE42
(使用代理)。 - 在UTF - 32中,一个字符始终由32位(4 个字节 = 1
Cardinal
或DWord
)组成,并且始终等于代码点,即$1F642
.
在 Delphi 中,您可以使用:
TEncoding.UTF8.GetString()
对于UTF-8- (或者
TEncoding.Unicode.GetString()
如果你有 UTF-16LE TEncoding.BigEndianUnicode.GetString()
如果你有 UTF-16BE)。
请记住,这只是文本中每个字母、符号和空格的字符:它可以通过选择进行标记(即Ctrl+ A)并复制到剪贴板(即Ctrl+ C)。不需要特别照顾。
推荐阅读
- python - Django 3.1:带有异步生成器的 StreamingHttpResponse
- firebase - 同一 Firebase 项目中的多个应用程序
- javascript - 如何修改 A-frame 中的默认组件?
- cucumber - 如果我尝试在 cypress+cucumber 中的仪表板上执行操作,则会发生注销
- java - Springboot中的数据库轮询和调度
- php - 如何在 PHP 中正确实现微软文本转语音
- c# - 除了microsoft.expressions.encoder,在c#中运行selenium测试时有什么方法可以记录屏幕?
- html - CSS stroke-dasharray 没有一路走好
- if-statement - 我如何在 9 和 109 和 209 等处做某事,在 99 和 199 和 299 等处做其他事情,以及在所有其他以 9 结尾的其他操作序列?
- multithreading - 线程和英特尔(和 AMD)的产品描述