问题标签 [surrogate-pairs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
171 浏览

python - Python Unicode - 可以在 Windows 控制台中打印哪些字符?

Python 可以在 Windows 控制台中打印哪些 Unicode 字符?

以下代码

给出了不起眼的结果,包括一个错误:

UnicodeEncodeError: 'utf-8' codec can't encode character '\ud800' in position 0: surrogates not allowed

str然而,声明值最高的文档0x110000是允许的。

有没有办法让更多的字符显示?

0 投票
1 回答
1038 浏览

javascript - 表情符号到/来自 Javascript 中的代码点

在我正在创建的混合 Android/Cordova 游戏中,我让用户以表情符号 + 字母数字的形式提供标识符 - 即 0..9、A..Z、a..z - 名称。例如

‍️堆栈溢出

在服务器端,用户标识符与 Emoji 和 Name 部分分开存储,只有 Name 部分要求是唯一的。游戏不时显示“联赛表”,因此用户可以看到他们与其他玩家相比的表现如何。为此,服务器发回由表情符号、姓名和分数组成的十个“高分”值序列。

然后将其在包含三列的表格中呈现给用户 - 表情符号、名称和分数各一列。这是我遇到一个小问题的地方。最初,我非常天真地假设我可以通过简单地查看handle.codePointAt(0). 当我意识到 Emoji 实际上可能是一个或多个 16 位 Unicode 值的序列时,我将代码更改如下

第 1 部分:剖析用户提供的“句柄”

在这一点上,我有“解剖”的句柄

上面的解释i += 2和使用说明handle.length这篇文章建议

  • 如果您点击前导代理,handle.codePointAt(n) 将返回完整代理对的代码点。在我的情况下,因为表情符号必须是第一个字符,所以表情符号的 16 位 Unicode 序列的主要代理是在0,2,4....
  • 从同一篇文章中我了解到,String.length在 Javascript 中将返回16 位代码单元的数量

第二部分 - 为“联赛表”重新生成表情符号

假设我的服务器返回到应用程序的排名表数据 {emoji: [128583, 8205, 65039],username:"Stackexchange",points:100}包含表情符号字符 ‍️ 的条目。现在这是麻烦的事情。如果我做

我明白了

但是,如果我从提供的数据中重新生成表情符号

我明白了

因此,尽管 reEmoji 拥有正确的表情符号,但它报告的长度却神秘地缩减为 4 个代码单元,而不是原来的 5 个。

如果我从重新生成的表情符号中提取代码点

这给了我

Even curioser,origEmoji.codePointAt(3)给出尾随代理对的值,9794reEmoji.codePointAt(3)给出下一个完整代理对的值65039

在这一点上我可以说

我真的在乎吗?

毕竟,我只想在单独的列中显示排名表表情符号,只要我得到正确的表情符号,引擎盖下发生的事情的细微之处并不重要。然而,这很可能会为未来储备问题。

这里的任何人都可以阐明正在发生的事情吗?

0 投票
1 回答
941 浏览

python-3.x - 将代理对转换为表情符号 - python3

我在另一个主题上找到了类似问题的解决方案,但不幸的是它对我不起作用。这是我的问题:

我正在从我想在另一个文件中搜索的代理对 unicode 制作数据帧(例如:“\uD83C\uDFF3”、“\u26F9”、“\uD83C\uDDE6\uD83C\uDDE8”):

接下来,我正在阅读带有文本的文件,其中一些行包含代理对 unicode:

在这个 for 循环中,我正在检查 line 是否包含 surrogatepairs unicode,如果它是真的,那么我想将这个 surrogatepair unicode 打印为表情符号 - 这就是我编码和解码这个“i”值的原因,它是 str:(解决方案来自:如何在 Python 中使用代理对?

因此,当我启动程序时,它仍然将 surrogatepairs unicode 打印为 str,而不是 emoji,但是当我自己将 surrogatepair unicode 输入打印函数时,它可以工作:

我究竟做错了什么?我试图从这个 i 和另一个解决方案中制作字符串,但它仍然不起作用。

编辑:

EDIT2:所以我发现了一些可行的方法,但仍需要改进: https ://stackoverflow.com/a/54918256/4789281

我要转换的另一个文件中的文本看起来文件:

当我这样做时,另一个主题中的建议是:

我有这样的事情:

所以我的代理对被替换了,但是我的波兰字符被一些奇怪的东西替换了。

0 投票
0 回答
73 浏览

utf-16 - UTF16 到 UTF32 的转换 - 代理对无效

在将 UTF16 数组转换为 UTF32 时,如果我遇到一个高代理项并且下一个值既不是高代理项也不是低代理项,我们是否应该使 UTF16 数组中的两个值都无效?或者

我们是否应该仅使高代理无效并继续转换下一个值?

参考:https ://unicodebook.readthedocs.io/unicode_encodings.html#surrogates

谢谢。

0 投票
0 回答
85 浏览

php - 如何检测字符串是否包含 PHP 中的任何补充字符?

据我所知,补充字符(或“代理对”)在第一个字符的范围内定义,第二个字符的范围0xd8000xdbff0xdc000xdfff

所以我试图检测任意字符串是否包含任何此类字符:

但这似乎并没有发现它们。例如:

返回false

所以为了测试它,我写了一个小网页来看看这些符号变成了什么代码:

但我得到的编码不是我所期望的:

在此处输入图像描述

为什么要给我f0, 9f, 98, 8d呢?那些不属于上述定义。那么我在这里做错了什么?

0 投票
1 回答
245 浏览

powershell - 在PowerShell中拆分表情符号序列

我有一个仅填充表情符号的文本框。没有空格或任何类型的字符。我需要拆分这些表情符号以识别它们。这是我尝试过的:

循环不是一个一个地打印字节,而是只运行一次,打印所有连接在一起的表情符号的代码。就像所有的表情符号都是一个项目。我用 6 个表情符号进行了测试,而不是得到这个:

61 216 7 222

61 216 67 222

61 216 10 222

61 216 28 222

61 216 86 220

60 216 174 223

我得到这个:

61 216 7 222 61 216 67 222 61 216 10 222 61 216 28 222 61 216 86 220 60 216 174 223

我错过了什么?

0 投票
0 回答
81 浏览

python - python - 如何将从txt文件读取的代理对转换回python 3中的表情符号?

我有几个 txt 文件要读取其中有字符串的位置,例如:

“是的!罐头里的沙丁鱼保持距离!\uD83E\uDD23”

问题是:当我在做

unicode 点被转换为表情符号,因为 python 将 \UDD23 或 \UD83E 分别视为两个单个字符。

输出:

此外,当我使用 len() 函数查看上述字符串的长度时,输出为 37。

但是,当我从文本文件中读取相同的字符串时,python 会将 \UDD23 或 \UD83E 读取为单独的字符,即总共 12 个字符,这是我不想要的,因为我的 encode().decode() 函数不会给出预期的结果。也就是说,unicode 点不会转换为表情符号。我使用了下面的代码:

输出是:

0 投票
2 回答
770 浏览

powershell - 如何使用 PowerShell 显示 Unicode 字符名称及其十六进制代码?

由于默认的 Windows PowerShell 控制台字体不支持表情符号,我想显示它们的代理对十六进制代码,理想情况下还显示它们的 Unicode 字符名称以进行调试。

我知道如何将表情符号转换为字节数组,但我还没有弄清楚如何将它们转换为代理对十六进制代码和 Unicode 字符名称。

我需要的是以下输出:

即,以下命令应将十六进制值转换回 Emoj: