Я понимаю, что строку в кодировке UTF-8 не следует разделять в середине многобайтового представления скаляра Unicode (кодовой точки). Аналогично для UTF-16.
На более высоком уровне строка Unicode представляет собой последовательность кодовых точек (скаляры Unicode), и кластеры кодовых точек могут использоваться для формирования сложных графем, например кодовых точек स
и ्
образуют графему स्
. Таким образом, строку не следует разделять в середине такого кластера. Точно так же флаги представлены с использованием последовательности символов региональных индикаторов, поэтому следует соблюдать осторожность, чтобы не разбить строку в середине такой последовательности.
Кроме того, существуют символы слева направо (LTR) и кодовые точки справа налево (RTL), которые полезны для двунаправленного текста. Я полагаю, что когда строка Unicode, содержащая двунаправленный текст, разделяется на две части, нам нужно вставить дополнительные кодовые точки LTR или RTL во вторую часть, чтобы сохранить исходную направленность, верно?
И, возможно, если исходная строка содержит кодовую точку Byte-Order-Mark (BOM), ее также следует добавить во вторую часть, верно?
Есть другие вещи нужно быть осторожным при разделении строк Unicode? Я пытаюсь оценить, насколько хорошо различные языки программирования поддерживают Unicode.
Edit : комментарий Адриано Репетти ниже указывает на Приложение № 29 из стандарта Unicode , которое отвечает этот вопрос подробно (спасибо!).