问题标签 [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.
java - 如何将字节从 128 映射到 255 到等效的 UTF16-LE 代理对
我正在努力实现这一目标:
我在 java Web 服务中有一个 PDF 字节 [],我必须将其作为 base64 字符串发送到 .NET 客户端,该客户端执行此操作以重建文件。
我无法更改客户端代码,现在 java web 服务正在调用另一个 .NET web 服务,该服务将 byte[] 转换为 base64 字符串:
除了可以通过各种方式制作的 base64(例如使用 org.apache.commons.codec.binary.Base64)之外,我还必须将原始 byte[] 转换为 UTF-16LE byte[]...
我试过这个:
这适用于低于 128 的值(例如 1 => 0100、2 => 0200、...、127 => 7F00),但对于高于 (128 -> 255) 的值,我不知道如何获得等效的 2 字节价值观;我知道对于字节 156 (9C) 对应的值是 8301 (0x5301) 而对于字节 224 (E0) 对应的值是 12501 (0x7D01) 但我没有设法找到一种算法来获取所有其他值。
字节值和相应的 UTF-16LE 代理对之间是否有映射表或将值从 128 映射到 255 的算法?
提前致谢!
c# - F# 中的代理 unicode 字符问题
我正在使用字符串,它可能包含代理 unicode 字符(非 BMP,每个字符 4 个字节)。
当我使用“ \Uxxxxxxxxv ”格式在 F# 中指定代理字符时 - 对于某些字符,它给出的结果与 C# 不同。例如:
C#:
给出:Length: 2, is surrogate: True
F#:
给出:Length: 2, is surrogate: false
注意:某些代理字符在 F# 中有效(“\U0010011”、“\U00100011”),但其中一些无效。
问:这是 F# 中的错误吗?如何使用 F# 处理字符串中允许的代理 unicode 字符(F# 是否有不同的格式,或者只有使用的方法 Char.ConvertFromUtf32 0x1D11E
)
更新:
s.ToCharArray()
为 F# 提供[| 0xD800; 0xDF41 |]
;对于 C#{ 0xD834, 0xDD1E }
cocoa - 提取 NSString 的第一个 Unicode 代码点(在 BMP 之外)的最简单方法?
由于历史原因,Cocoa 的 Unicode 实现是 16 位的:它0xFFFF
通过“代理对”处理上面的 Unicode 字符。这意味着以下代码将不起作用:
现在,这段代码 100% 的时间都有效,但它非常冗长:
这段代码使用工作,mbtowc
但它仍然非常冗长,影响全局状态,不是线程安全的,并且可能会填满自动释放池:
是否有任何简单的Cocoa/Foundation 习惯用法用于从 NSString 中提取第一个(或第 N 个)Unicode 代码点?最好是只返回代码点的单行代码?
在这篇关于 Cocoa Unicode 支持的出色总结(接近文章末尾)中给出的答案只是“不要尝试。如果您的输入包含代理对,请将它们过滤掉或其他什么,因为没有理智的方法来处理它们适当地。”
java - 如何删除Java中的代理字符?
我正面临一种情况,即我在保存到 MySql 5.1 的文本中获取代理字符。由于不支持 UTF-16,因此我想在将其保存到数据库之前通过 java 方法手动删除这些代理对。
我现在已经编写了以下方法,我很想知道是否有直接和最佳的方法来处理这个问题。
在此先感谢您的帮助。
python - Python:当它包含代理对时获得正确的字符串长度
考虑以下关于 IPython 的交流:
正确的输出应该是7
,但是因为这七个汉字中的第五个具有高 Unicode 代码点,所以它在 UTF-8 中由“代理对”表示,而不仅仅是一个简单的代码点,因此 Python认为它是两个字符而不是一个字符。
即使我使用unicodedata
,它将代理对正确地作为单个代码点(\U00026177
)返回,当传递给len()
错误的长度时仍然返回:
如果不采取像为 UTF-32 重新编译 Python 这样的激烈步骤,有没有一种简单的方法可以在这种情况下获得正确的长度?
我在 IPython 0.13、Python 2.7.2、Mac OS 10.8.2 上。
c# - 从 MS Word 文档中检索 SurrogatePairs
我们已经编写了一个应用程序,它将打开 Microsoft Word 文档,读取里面的所有文本,然后将这些数据发送到外部系统进行处理。这在过去运行良好,但自从我们接受 Unicode 后,我们在阅读 Word 文档时遇到了一些问题。
我们看到的问题是我们无法显示任何占用多个代码单元的字符,例如(Surrogate Pair)或ā̈(Grapheme Cluster)。当我们尝试显示 时,我们得到两个 ??,而 ā̈,我们得到组成字素的每个单独的字符。
我有一种感觉,我们看到这些字符返回的原因是因为我们没有正确读取文件。但是我一直在寻找,还没有找到解决方案。
我创建了一个只包含一个值的 Word 文档: .
我们在代码中做的第一件事是将文件读入字节数组:
经过进一步调查,字节数组包含以下值:
通过查找十六进制值,我了解到 0x3f 与 ? 相关,这就解释了为什么我们要返回两个 ??。
然后,当我们尝试将数据转换回字符串时,我们最终得到了两个 ??
我认为问题可能与我们在文档中的阅读方式有关,但我不能 100% 确定。谁能引导我走正确的道路?
java - Java charAt 用于具有两个代码单元的字符
来自核心 Java,第一卷。1,第 9 版,第 69:
字符 ℤ 在 UTF-16 编码中需要两个代码单元。打电话
不返回空格,而是返回 ℤ 的第二个代码单元。
但似乎sentence.charAt(1)
确实返回了一个空格。例如,if
以下代码中的语句计算结果为true
。
为什么?
如果相关,我在 Ubuntu 12.10 上使用 JDK SE 1.7.0_09。
c# - 如何创建一个包含代理对的字符串?
我在 Jon Skeet 的博客上看到了这篇文章,他谈到了字符串反转。我想尝试他向自己展示的示例,但它似乎有效......这让我相信我不知道如何创建一个包含代理对的字符串,这实际上会导致字符串反转失败。实际上如何创建一个带有代理对的字符串,以便我自己可以看到失败?
ios - IOS中的Unicode代理对?
我有一个代理对,示例如下:
\ud83d\ude04
我想知道如何获取相应的值值,如“1F604”
任何示例代码?
任何帮助将是明显的?
java - 如何验证 CharSequence 的实例是否是 Unicode 标量值序列?
我有一个java.lang.CharSequence
. 我需要确定这个实例是否是一个Unicode 标量值序列(即该实例是否为 UTF-16 编码形式)。尽管保证java.lang.String
,Java 字符串不一定是 UTF-16 编码形式(至少不是根据最新的Unicode 规范,目前是 6.2),因为它可能包含孤立的代理代码单元。(然而,Java 字符串是Unicode 16 位字符串。)
有几种明显的方法可以解决这个问题,包括:
然而,似乎这样的东西应该已经作为库函数存在。我只是在标准 API 中找不到它。我错过了它,还是我需要实施它?