标签: grapheme-cluster

字素簇中的最大代码点数量

我正在使用 C++ ICU 库。我希望将 utf-8 字符串分割成大致相等的块。但是,我希望在字素簇边界处划分块。我不希望将整个字符串转换为 utf-16 来实现内存和速度效率。相反,我想将少量接近我估计的块边界的 utf-8 代码点转换为 utf-16。然后我可以使用 ICU 的BreakIterator来计算出确切的边界。

组成字素簇的码点数量是否有硬性上限?如果是这样,那是什么?我需要知道这一点才能确定从 utf-8 转换为 utf-16 所需的最小代码点。

c++ utf icu breakiterator grapheme-cluster

6
推荐指数
1
解决办法
1259
查看次数

在Dart中处理字素簇

据我所知,Dart不支持字素簇,尽管有人说支持它:

在实施之前,通过字素簇进行迭代的选择有哪些?例如,如果我有这样的字符串:

String family = '\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F467}'; // ??
String myString = 'Let me introduce my $family to you.';
Run Code Online (Sandbox Code Playgroud)

在五个代码点的家庭表情符号后面有一个光标:

在此处输入图片说明

如何将光标向左移动一个用户可感知的字符?

(在这种特殊情况下,我知道了字素簇的大小,因此我可以做到,但是我真正要问的是找到任意长的字素簇的长度。)

更新资料

我从本文中看到,Swift使用了系统的ICU库。Flutter中可能有类似的可能。

补充代码

对于那些想玩我上面的示例的人,这里是一个演示项目。按钮将光标向右或向左移动。当前需要按8个按钮才能将光标移到家庭表情符号上。

在此处输入图片说明

主镖

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Grapheme cluster testing')),
        body: BodyWidget(),
      ),
    );
  }
}

class BodyWidget extends StatefulWidget {
  @override
  _BodyWidgetState createState() => _BodyWidgetState();
}

class _BodyWidgetState extends State<BodyWidget> {

  TextEditingController …
Run Code Online (Sandbox Code Playgroud)

unicode icu dart flutter grapheme-cluster

4
推荐指数
2
解决办法
408
查看次数

规范化字符串会得到与规范化单个字素簇相同的结果吗?

对字符串执行 Unicode 规范化(假设没有孤立的组合字符)的结果是否与将字符串拆分为字素簇、单独规范化每个簇然后连接规范化的字素簇的结果相同?(如果是这样,这是否仅适用于规范化形式的子集?)

提出这个问题主要是出于对 Unicode 如何工作以及弄清楚可能存在哪些潜在边缘情况的兴趣,而不是作为具体应用程序的一部分。

unicode unicode-normalization grapheme-cluster

1
推荐指数
1
解决办法
179
查看次数