UTF-8 - это механизм для кодирования последовательностей символов Unicode в виде байтовых последовательностей, но не единственным способом. Unicode не подразумевает UTF-8, и технически UTF-8 также не подразумевает Unicode.
Когда я вставляю строку в юникоде, она разбивается на 4 символа (utf-8)
Это функция того, как вы храните строковые данные, и
- звучит сломано
- вероятно не с использованием UTF-8, вопреки вашему утверждению
Так что все, что я хочу, это когда вставляется строка Unicode, она вставляется
как уникальная комбинация, которая позволила бы искать, что
Строка однозначно.
Это относительно просто: закодируйте все свои строки одинаково. Я бы выбрал кодирование всех из них в UTF-8, но вы также можете использовать любую другую кодировку без сохранения состояния, которая поддерживает все символы, которые могут появиться в ваших строках, например UTF-16 или UTF-32. Но вы должны использовать согласованную кодировку для всех символов всех строк.
Сделав это должным образом, вам не обязательно делать что-то особенное, чтобы заставить ваше дерево работать. * Однако, если вы выберете UTF-16 или UTF-32, я бы предложил структурировать три вокруг размера их кодовых единиц (16 или 32 бита, соответственно). В этом нет необходимости, но, скорее всего, это даст преимущества в виде более мелких и, следовательно, более эффективных попыток.
* Обратите внимание, однако, что кодовые блоки UTF-16 и UTF-32 включают в себя множество охватывающих байтов со значением 0, например 0x0031 и 0x00000200. Если вы рассматриваете их как последовательности байтов вместо последовательностей кодовых единиц, то вы должны учитывать это. В частности, вы должны избегать предположения, что отдельные нулевые байты служат терминаторами.