按字符拆分Erlang UTF8二进制文件

rpo*_*kij 1 string binary erlang utf-8

如何拆分二进制Erlang字符串将其数据视为UTF8字符?

假设我们有一个二进制文件,它应该分成两部分,第一部分应该包含前两个UTF8字符.这里有几个例子:
<<"????">>应该成为[<<"??">>, <<"??">>]

<<"?????">> 应该成为 [<<"??">>, <<"???">>]

rvi*_*ing 6

要将utf-8编码的二进制字符串拆分为两部分,第一部分包含前两个字符,第二部分包含其余部分,您可以使用该函数:

split_2(<<One/utf8,Two/utf8,Rest/binary>>) ->
    %% One and Two are now the unicode codepoints of the first 2 characters.
    [<<One/utf8,Two/utf8>>,Rest].
Run Code Online (Sandbox Code Playgroud)

使用utf8匹配二进制文件将提取第一个utf-8编码字符,并将unicode代码点作为整数返回,这就是为什么我们必须构建前两个字符的结果二进制文件.如果二进制文件中没有2个utf-8编码字符,则此函数将失败.

位串和二进制之间的区别在于二进制的大小必须是8位的倍数,而位串可以是任何大小.