Bây giờ tôi đang cố gắng sử dụng libunistring trong chương trình c của tôi. Tôi đã xử lý chuỗi UTF-8, và cho nó tôi đã sử dụng hàm u8_strlen() từ thư viện libunistring.
Mã dụ:libunistring u8_strlen() bằng strlen()?
void print_length(uint8_t *msg) {
printf("Default strlen: %d\n", strlen((char *)msg));
printf("U8 strlen: %d\n", u8_strlen(msg));
}
Chỉ cần tưởng tượng mà chúng ta gọi print_length()
với msg = "привет"
(Cyrillic, utf-8 mã hóa). Tôi đã dự kiến rằng strlen()
phải trả về 12 (6 chữ cái * 2 byte cho mỗi chữ cái) và u8_strlen()
phải trả lại 6 (chỉ 6 chữ cái).
Nhưng tôi nhận được kết quả tò mò:
Default strlen: 12
U8 strlen: 12
Sau này tôi đã cố gắng để tra cứu thực hiện u8_strlen, và tìm thấy mã này:
size_t
u8_strlen (const uint8_t *s)
{
return strlen ((const char *) s);
}
Tôi đang tự hỏi, là nó lỗi hoặc đó là câu trả lời đúng? Nếu nó đúng, tại sao?