Вы хотите использовать unicode-segmentation
ящик :
use unicode_segmentation::UnicodeSegmentation; // 1.5.0
fn main() {
for g in "नमस्ते्".graphemes(true) {
println!("- {}", g);
}
}
( Детская площадка , примечание: редактор игровой площадки может 't правильно обрабатывает строку, поэтому позиция курсора в этой строке неправильная)
Это печатает:
- न
- म
- स्
- ते्
true
в качестве аргумента означает, что мы хотим выполнить итерацию по расширенномуграфем кластеров. См. graphemes
документацию для получения дополнительной информации.
Сегментация в кластеры графем Unicode в какой-то момент поддерживалась стандартной библиотекой, но, к сожалению, она была удалена из-за размеранеобходимые таблицы Unicode. Вместо этого де-факто решение состоит в том, чтобы использовать ящик. Но да, я думаю, что очень жаль, что «сегментация стандартной библиотеки по умолчанию» использует кодовые точки, которые семантически не имеют большого смысла (то есть подсчет их или деление их, как правило, не имеет смысла).