Я хочу проиндексировать символы в строке utf8, которая не обязательно содержит
только символы ascii. Я хочу такое же поведение, как в javascript:
> str = "lλך" // i.e. Latin ell, Greek lambda, Hebrew lamedh
'lλך'
> str[0]
'l'
> str[1]
'λ'
> str[2]
'ך'
Следуя совету UTF-8 Everywhere , я представляю свою строку со смешанной длиной символов так же, как и любое другое строковое значение в c, и не использую wchars.
Проблема в том, что в C невозможно получить доступ к 16-му символу строки: только 16-й байт . Поскольку λ
кодируется двумя байтами в utf-8, я должен получить доступ к 16-му и 17-му байтам строки, чтобы распечатать один λ
.
Для справки, вывод:
#include <stdio.h>
int main () {
char word_with_greek[] = "this is lambda:_λ";
printf("%s\n",word_with_greek);
printf("The 0th character is: %c\n", word_with_greek[0]);
printf("The 15th character is: %c\n",word_with_greek[15]);
printf("The 16th character is: %c%c\n",word_with_greek[16],word_with_greek[17]);
return 0;
}
есть:
this is lambda:_λ
The 0th character is: t
The 15th character is: _
The 16th character is: λ
Есть ли простой способ разбить строку на символов ? Не кажется слишком сложным написать функцию, которая разбивает строку на wchars, но я думаю, что кто-то уже написал это, но я не могу ее найти.