Могу ли я использовать memcmp два строки сравнения многобайтовых символов?

Я пытаюсь написать код для сравнения двух строк. В Windows я могу использовать strcmp, но я хочу написать для многобайтовой символьной строки, чтобы она была совместима со всеми другими платформами. Могу ли я использовать memcmp? если нет, то есть ли другой API, который я могу использовать, или мне нужно написать свой собственный API.

3 ответа

Ты должен быть осторожен. Я не эксперт по Unicode/ многобайтовым кодировкам, но я знаю, что с диакритическими знаками иногда две строки можно считать равными, если их байты не совпадают. Рекомендуется использовать предварительно протестированные API, потому что строковое кодирование может быть довольно запутанным.

Смотрите старую новость о картографировании. Я не могу думать о ссылке для диакритических знаков, но если я сделаю это, я отправлю это.

Если две строки используют одинаковую кодировку, вы можете использовать memcmp, Если они используют UTF-8 и ваши строки не содержат символ NULL (U+0000), вы даже можете использовать strcmp, поскольку в отсутствие самого NULL 0 не появляется в кодированных строках UTF-8. Другой вариант - конвертировать строки в широкие символы, используя mbstowcs,

Если строки обе используют одинаковую кодировку, memcmp будет работать нормально. Имейте в виду, что широкие символы имеют разные размеры на разных платформах.

Если строки используют разные кодировки, вам понадобится библиотека, такая как ICU, чтобы справиться с ней.

Другие вопросы по тегам