gpt4 book ai didi

基于字节的 Perl substr

转载 作者:行者123 更新时间:2023-12-01 11:01:32 25 4
gpt4 key购买 nike

我在我的应用程序中使用 SimpleDB。一切顺利,除非一个属性的限制是 1024 字节。因此,对于长字符串,我必须将字符串切成块并保存。

我的问题是有时我的字符串包含 unicode 字符(中文、日语、希腊语)和 substr()函数基于字符数而不是字节数。

我尝试使用 use bytes用于字节语义或更高版本substr(encode_utf8($str), $start, $length)但它根本没有帮助。

任何帮助,将不胜感激。

最佳答案

UTF-8 被设计成易于检测字符边界。要将字符串拆分为有效的 UTF-8 块,您可以简单地使用以下命令:

my $utf8 = encode_utf8($text);
my @utf8_chunks = $utf8 =~ /\G(.{1,1024})(?![\x80-\xBF])/sg;

那么要么
# The saving code expects bytes.
store($_) for @utf8_chunks;

或者
# The saving code expects decoded text.
store(decode_utf8($_)) for @utf8_chunks;

示范:
$ perl -e'
use Encode qw( encode_utf8 );

# This character encodes to three bytes using UTF-8.
my $text = "\N{U+2660}" x 342;

my $utf8 = encode_utf8($text);
my @utf8_chunks = $utf8 =~ /\G(.{1,1024})(?![\x80-\xBF])/sg;

CORE::say(length($_)) for @utf8_chunks;
'
1023
3

关于基于字节的 Perl substr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10302468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com