问题标签 [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 回答
84 浏览

haskell - 使用 Haskell 将代理对写入文件

这是我的代码:

执行上面的代码会报错:

原因是 GHC 本身阻止了它,因为它们是代理代码点:https ://github.com/ghc/ghc/blob/21f0f56164f50844c2150c62f950983b2376f8b6/libraries/base/GHC/IO/Encoding/Failure.hs#L114

我想写一些需要这些数据的测试文件。现在,我正在使用 Python 来实现我想要的 - 但我很想知道是否有办法(使用 Haskell 的解决方法)来实现这一目标。

0 投票
1 回答
277 浏览

python - Python 2.7: Strange Unicode behavior

I am experiencing the following behavior in Python 2.7:

What is the explanation for this behavior? More specifically:

  1. I'd expect two strings to be equal if statement #5 is true, while #3 proves otherwise.
  2. Encoding both code points together like in statement #6 yields results different from when encoded one by one in #7 and #8. Looks like the two code points are treated as one 4-byte code point. But what if I actually want them to be treated as two different code points?
  3. As you can see from #9 the numbers in a2 are actually a1 encoded using UTF-16-BE but although they were specified as Unicode code points using \u inside a Unicode string (!), Python still could somehow get to equality in #5. How could it be possible?

Nothing makes sense here! What's going on?

0 投票
2 回答
954 浏览

javascript - Unicode 代理对和 String.fromCodePoint() — JavaScript

我正在处理包含 UTF 星体符号代理一半的转义序列的原始字符串。(我想我说得对……)

让我们以上面的表情符号为例。如果我有代理对 (\uD83D\uDCA9) 我怎样才能反过来将它的十六进制值转换为 JavascriptString.fromCodePoint()函数的有效参数?

我尝试了以下方法:

PS:我熟悉 ES6 转义序列,它在括号 {...} 之间显示十六进制值,而不是使用代理半部分。但我需要用代理对来做到这一点!

非常感谢任何建议。

0 投票
1 回答
930 浏览

c# - C# - 从任何字符串中查找 unicode 代码点的代理对的正则表达式?

我正在尝试解析一条可能包含表情符号的消息。可以接收的示例消息如下所示:

应该匹配的是 \u00a0 作为单个字符,和 \ud83d\ude0b 作为一对。

我有可以提取单个代码的正则表达式,但不能匹配完整的表情符号:

有没有一种简洁的方法来解释一个句子中的任何/多个表情符号,以便我可以用我拥有的功能替换代理对?谢谢!

编辑:这是我将与正则表达式一起使用的函数

我有一个字典,其中键是 unicode,值是对表情符号图像的引用,因此我可以在 Unity UI 元素中显示它。

编辑2:

由于这个问题有点过于宽泛,我将具体说明我要完成的工作。我通过 websocket 连接从服务器接收 json 消息。此消息显示在 Unity 面板中,其中每条消息都是文本网格 pro text 对象。发送表情符号时,消息显示类似于上面的示例消息,唯一的变化是代理对根据发送的表情符号发生变化。为了将相应的表情符号图像正确插入到 text mesh pro 对象中,我需要获取指向正确表情符号的精灵图集 id。由于我没有手动将精灵插入图集中,而是从拼接的精灵表中读取它们,因此访问每个图像的唯一方法是通过它们的索引 id。要通过 id 正确识别图集中的表情符号,我创建了一个字典,按顺序插入 Unicode,因为它们作为键出现在精灵表中,其中值是图集中的索引。我现在要做的是使用正则表达式解析收到的表情符号消息,将此解析后的数据发送到我在上面发布的函数中以将其转换为 Unicode 值,然后从字典中检索正确的 id 以最终插入表情符号最初是在前端输入的。如果有更好的解决方法请告诉我,但根据我所做的研究,将图像插入 Unity 文本对象的唯一有效方法是我如何处理它。因此,我需要从消息中获取代理对。我现在要做的是使用正则表达式解析收到的表情符号消息,将此解析后的数据发送到我在上面发布的函数中以将其转换为 Unicode 值,然后从字典中检索正确的 id 以最终插入表情符号最初是在前端输入的。如果有更好的解决方法请告诉我,但根据我所做的研究,将图像插入 Unity 文本对象的唯一有效方法是我如何处理它。因此,我需要从消息中获取代理对。我现在要做的是使用正则表达式解析收到的表情符号消息,将此解析后的数据发送到我在上面发布的函数中以将其转换为 Unicode 值,然后从字典中检索正确的 id 以最终插入表情符号最初是在前端输入的。如果有更好的解决方法请告诉我,但根据我所做的研究,将图像插入 Unity 文本对象的唯一有效方法是我如何处理它。因此,我需要从消息中获取代理对。但从我所做的研究来看,将图像插入 Unity 文本对象的唯一有效方法是我如何处理它。因此,我需要从消息中获取代理对。但从我所做的研究来看,将图像插入 Unity 文本对象的唯一有效方法是我如何处理它。因此,我需要从消息中获取代理对。

编辑3:

如果其他人碰巧偶然发现了这个问题,我会留下我想出的从 html 网站获取表情符号的解决方案,通过 websocket 服务器进入 Unity textmeshpro。

这是一个 google 电子表格,其中包含十六进制值和我用来在 Unity 中创建字典/精灵图集的精灵表:https ://docs.google.com/spreadsheets/d/1XQY1n9cA1hx_PnsXoisxjanZRiQG0gd25VYEmk1W7mE/edit?usp=sharing 。

然后我使用了一个可以在这里找到的库:https ://github.com/aaronpk/emoji-detector-php

它可以解析字符串并找到表情符号。我用下面 sln 提供的正则表达式替换了使用的正则表达式,然后调整了主脚本以仅返回消息文本,但表情符号替换为包含在分隔符中的十六进制,我可以在 Unity 端使用正则表达式找到。

要在我的服务器脚本中调用它,我只需要添加:

在我的脚本顶部,并按如下方式调用该函数:

我确保这仅发送到我的 Unity 客户端,因为我将它们的 resourceId 存储在服务器代码中。

在 Unity 方面,为了找到需要替换的表情符号,我使用了:

作为文本元素,我实例化的是一个文本网格专业文本 GUI 元素,它能够将它转换为我使用精灵表制作的精灵图集中的图像。希望这对将来的人有所帮助!

0 投票
2 回答
174 浏览

python - Python unicode 索引显示不同的字符

我在包含 Unicode 字符的 Python 2.7.10 的“窄”版本中有一个 Unicode 字符串。我正在尝试使用该 Unicode 字符作为字典中的查找,但是当我索引字符串以获取最后一个 Unicode 字符时,它返回一个不同的字符串:

为什么会发生这种情况,如何'\U0001f44d'从字符串中检索?

编辑:unicodedata.unidata_version是 5.2.0 并且sys.maxunicode是 65535。

问题截图

0 投票
1 回答
120 浏览

python - StringIO(HighSurrogate) 是否应该在 Python 2.7 中引发错误?

当我运行这个 Python 2.7 代码时(编辑:更新了代码

CPython 运行良好,但 IronPython 抛出以下错误:

我认为这是因为U+D801 是一个不成对的代理,因此是一个无效字符,但是哪个实现在这里显示正确的行为?这段代码应该抛出还是不抛出?

0 投票
1 回答
386 浏览

vb.net - 从字符串替换表情符号

我是 vb 网络的新手。我正在尝试处理包含表情符号的字符串,但我做不到。我的字符串看起来像这样:我想用我正在做的替换是使用 string.remove 和 string.add 但我收到代理对错误。​​</p>

0 投票
2 回答
476 浏览

string - 如何在 Dart 中反转包含代理对的字符串?

我正在使用 Dart 玩算法,当我真正遵循 TDD 时,我意识到我的代码有一些限制。

作为面试问题的一部分,我试图反转字符串,但我无法正确反转代理对。

输出:

您可以看到简单的表情符号被正确反转,因为我使用的是runes而不是简单地执行s.split('').toList().reversed.join('');,但代理对被错误地反转。

如何使用 Dart 编程语言反转可能包含代理对的字符串?

0 投票
0 回答
72 浏览

python - 如何编码 unicode 代理对,写入文件

我正在创建一个使用(几乎)所有 unicode 字符的压缩/加密程序,然后将数据写入文件。但是,要写入文件,我需要将字符编码为字节。但是,当我这样做时,它给出了这个错误:

我已经尝试了所有内置的python编解码器,除了'utf-7'之外,它们都不起作用,但是,这只是将unicode编码为base64,这违背了我想要实现的目标。

我希望它将变量“unicode_madness”写入文件,它确实如此,但有时它会尝试使用代理 unicode 字符。

为了解决这个问题,我要么需要能够避免使用代理字符(同时保持压缩无损),要么我需要找出哪些 unicode 字符使用代理,然后我可以相应地调整程序。

谢谢你的帮助!

0 投票
1 回答
825 浏览

php - PHP json_decode 不适用于由节点 12 格式良好的 JSON.stringify 引起的单个未配对代理项

节点 12 现在使用格式良好的 JSON.stringify,它为单独的代理输出转义序列。当有一个单独的代理被转义时,PHP 无法对此进行 json_decode。

以 Node.js 中的以下代码示例为例。

然后,此响应以 JSON 格式发送到 PHP 服务器并进行解码。这是发生错误的地方。Node10 的输出过去可以与 PHP json_decode 一起正常工作,但它不再适用于 Node12 的输出。

我简化了 NODE->PHP 示例,见下文。

我希望以下选项JSON_INVALID_UTF8_IGNOREJSON_INVALID_UTF8_SUBSTITUTE在 PHP 7.3+ 中与 json_decode 一起使用,但它根本没有帮助。JSON_THROW_ON_ERROR实际上会引发错误以使其更易于调试。