Могу ли я использовать memcmp два строки сравнения многобайтовых символов?
Я пытаюсь написать код для сравнения двух строк. В Windows я могу использовать strcmp, но я хочу написать для многобайтовой символьной строки, чтобы она была совместима со всеми другими платформами. Могу ли я использовать memcmp? если нет, то есть ли другой API, который я могу использовать, или мне нужно написать свой собственный API.
3 ответа
Ты должен быть осторожен. Я не эксперт по Unicode/ многобайтовым кодировкам, но я знаю, что с диакритическими знаками иногда две строки можно считать равными, если их байты не совпадают. Рекомендуется использовать предварительно протестированные API, потому что строковое кодирование может быть довольно запутанным.
Смотрите старую новость о картографировании. Я не могу думать о ссылке для диакритических знаков, но если я сделаю это, я отправлю это.
Если две строки используют одинаковую кодировку, вы можете использовать memcmp
, Если они используют UTF-8 и ваши строки не содержат символ NULL (U+0000), вы даже можете использовать strcmp
, поскольку в отсутствие самого NULL 0 не появляется в кодированных строках UTF-8. Другой вариант - конвертировать строки в широкие символы, используя mbstowcs
,
Если строки обе используют одинаковую кодировку, memcmp
будет работать нормально. Имейте в виду, что широкие символы имеют разные размеры на разных платформах.
Если строки используют разные кодировки, вам понадобится библиотека, такая как ICU, чтобы справиться с ней.