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

utf-8 - “代理对”概念在数据库中如何工作?

我的问题与数据库(尤其是 SQL Server)有关:在官方指南中,提到使用“NVARCHAR/NCHAR”时,使用“每个字符 2 个字节的存储空间”和“如果需要代理对,则字符将需要 4 个字节的存储空间。” 需要代理对时如何使用 4 字节?该“需要”将如何与 SQL Server 进行通信,它如何知道?我只是不确定这将如何解决——当我编程时,我要么将某些东西定义为 UTF-8、16 或 32。SQL Server 似乎只接受 UTF-16,它会以某种方式使用需要时代理对。有人可以向我解释这应该如何工作吗?另外,我真的很感谢来源和参考资料,以便我可以对此进行更多研究。

我尝试阅读有关代理对的内容,除了一些仅触及表面的来源并解释说“代理对只是使用两个 UTF-16 表示 UTF-32 字符的机制”之外,几乎没有任何内容。

非常感谢您对冗长的问题感到抱歉。

0 投票
2 回答
913 浏览

.net - 代理对检测失败

我正在从事 F# 中的一个小型项目,该项目涉及将现有 C# 代码移植到 F#,我似乎遇到了两种语言之间处理正则表达式的方式的差异(我发布这个希望发现我是只是做错了什么)。

这个次要函数使用此处概述的正则表达式技巧简单地检测代理对。这是当前的实现:

如果我然后对一个已知的代理对执行它,如下所示:

我进入falseFSI 窗口。

如果我使用等效的 C#:

和相同的输入值,我(正确)得到true返回。

这是一个真实的问题吗?我只是在我的 F# 实现中做错了吗?

0 投票
2 回答
18945 浏览

c# - C#:如何获取字符串的第一个字符?

我们已经有一个关于获取char字符串的前 16 位的问题。

这包括问题代码:

并接受答案代码:

我想这有一些用途,但是当字符串包含文本时,我们希望我们都知道单个 16 位字符不能容纳一个字符,即使在我们实际上指的是“代码点”的有限意义上也是如此。

我是一名程序员,但不是 C# 程序员。我只是想帮助一位在线同事修复这样的错误,以防你觉得这是一个太基本的问题。

因此,如果我们在一个char数组中有一个 C# 中的字符串,以正确的 UTF-16 编码,可能包括一个代理对作为第一个字符/代码点,因此可能由两个chars 组成,我如何获得第一个字符?

(我天真地假设微软为此提供了一个字符串函数,并且我不必手动检查代理对。)

0 投票
2 回答
1726 浏览

ios - 如何在 Swift 中将代理对转换为 Unicode 标量

以下示例取自字符串和字符文档

在此处输入图像描述

55357U+D83D十六进制)和56374U+DC36十六进制)是形成 Unicode 标量的代理对U+1F436,它是DOG FACE字符。有没有办法去另一个方向?也就是说,我可以将代理对转换为标量吗?

我试过了

但我收到“无效的 Unicode 标量”错误。

这个 Objective C 答案这个项目似乎是自定义解决方案,但是 Swift(尤其是 Swift 2.0+)中是否有任何内置的东西可以做到这一点?

0 投票
2 回答
9774 浏览

python - Python 无法使用 surrogateescape 进行编码

我对 Python (3.4) 中的 Unicode 代理编码有疑问:

如果我没记错的话,根据Python 文档

'surrogateescape':解码时,将字节替换为从 U+DC80 到 U+DCFF 的各个代理代码。当编码数据时使用“surrogateescape”错误处理程序时,此代码将被转换回相同的字节。

代码应该只生成源序列 ( b'\xCC')。那么为什么会引发异常呢?

这可能与我的第二个问题有关:

在 3.4 版中更改:utf-16* 和 utf-32* 编码器不再允许对代理代码点 (U+D800–U+DFFF) 进行编码。

(来自https://docs.python.org/3/library/codecs.html#standard-encodings

据我所知,如果没有代理对,就不可能将某些代码点编码为 UTF-16。那么这背后的原因是什么?

0 投票
2 回答
1614 浏览

delphi - 从 Delphi 字符串中检测和检索代码点和代理项

我试图更好地理解 Delphi 中的代理对和 Unicode 实现。

如果我在 Delphi 中对 Unicode 字符串 S := 'Ĥà̲V̂e' 调用 length() ,我会返回 8。

这是因为单个字符 [Ĥ]、[à̲]、[V̂] 和 [e] 的长度分别为 2、3、2 和 1。这是因为 Ĥ 有一个代理项,à̲ 有两个额外的代理项,V̂ 有一个代理项,而 e 没有代理项。

如果我想返回包含所有代理项的字符串中的第二个元素 [à̲],我该怎么做?我知道我需要对各个字节进行某种测试。我使用例程进行了一些测试

这个 SO Question中引用。

但得到了一些不寻常的结果,例如,这里有一些不同代码点的长度和大小。 下面是我如何生成这些表的片段。

第一组:这对我来说很有意义,每个代码点大小加倍,但这些都是一个字符,Delphi 给我的长度只有 1,完美。

第二组:最初在我看来,长度和代码点是颠倒的?我猜这是因为字符+代理被单独处理,因此第一个代码点大小是'H',即1,但长度返回'H'加上'^'的长度。

一些额外的测试...

Delphi 中是否有可靠的方法来确定 Unicode 字符串中元素的开始和结束位置?

我知道我使用元素这个词的术语可能不正确,但我认为代码点和字符也不正确,特别是考虑到一个元素的代码点大小可能为 3,但长度仅为 1。

0 投票
1 回答
796 浏览

regex - 检查 Python 3 字符串中的非法代理

特别是在 Python 3.3 及更高版本中,使用简单匹配检查孤儿代理是否足够:

基于所有合法代理都将被表示为星体代码点因此不匹配的假设,忽略非法代理,或者是否需要注意警告和边缘情况?

0 投票
0 回答
355 浏览

c# - Unity3d 代理对表情符号不出现

我在一个统一项目中工作,我正在其中添加一个聊天模块。我正面临情绪问题,因为它没有出现。我将统一的 .Net 框架更改为使用 microsoft .net 框架,然后使用解决 microsoft .net 桌面应用程序内部问题的代码

上面的代码解决了它,我可以看到笑脸。但是当我在 unity3d 中使用它时,我得到了这样的输出(它将代理分为两部分,高代理和低代理)。

有没有解决这个问题的方法,或者至少有解决方法。

谢谢。

0 投票
1 回答
1176 浏览

javascript - 带有 Javascript 的表情符号代理字符串。如何解析?

我想用javascript表达表情符号。我有一个像...

其中包含键和表情符号代理作为值。我将阅读此内容,如果输入字符串与键匹配,则将单词替换为那些表情符号。

即键入“^^”将被替换为微笑标记。

但是有些奇怪,如果我将这些信息作为对象,它会很好地打印表情符号。

像...

并替换部分看起来像......

但是当我从文件中读取信息时,它会打印像'\ud83d\ude22'这样的字符串。

如何用 js 表示代理字符串?(我不想使用 3rd 方库。)

仅供参考,js 文件和目标文件都使用 UTF-8 编码。

======== 文件加载部分

=========== 已编辑

我找到了一个提示。

当我从文件中读取时,它会更改\u\\u,而当我从文本中读取时,它会保持原样。

IE

  • 文件版本:\ud83d\ude03\\ud83d\\ude03
  • 脚本版本:\ud83d\ude03本身

所以重点是如何防止它\变为\\.

我仍然没有找到答案。

0 投票
1 回答
1317 浏览

c++ - 如何在 C++ 中将 UTF-16 代理十进制转换为 UNICODE

我从参数中得到了一些字符串数据,例如��.

这些是 Unicode 的 UTF-16 代理对,以十进制表示。

如何使用标准库将它们转换为 Unicode 代码点,例如“U+1F62C”?