Этот вопрос:C: символ против неподписанные символ для текстовых данных не-ASCII
делает большую работу по обсуждению полукокса против неподписанные символ против подписал полукокса в C.
Однако он не касается непосредственно того, что должно использоваться для текста, отличного от ASCII. Таким образом, если у меня есть массив байтов, который представляет текст в некотором произвольном наборе символов, например UTF-8 или Big5 (или иногда ASCII), следует ли использовать массив char или unsigned char?
Я склоняюсь к использованию полукокса, потому что в противном случае НКА дает мне предупреждения о знаковости указателей, когда массив является ASCII, и я использую STRLEN. Но я хотел бы знать, что правильно.
Да, принятый ответ правилен в этом отношении. И строковый тип C представляет собой последовательность байтов с не-NUL, заканчивающихся NUL-байтом, неопределенной кодировки, хотя использовать UTF-8, если у вас есть какой-либо выбор вообще. – Deduplicator
За исключением UTF-8, вы не хотите использовать strlen, потому что могут быть внутренние NUL. Во всяком случае, это огромная тема. Для Unicode я предлагаю http://site.icu-project.org/ –
@Deduplicator. Прочтите более внимательно: ** За исключением ** UTF-8, ... могут быть внутренние NUL. И то, что я имел в виду, это то, что OP упоминает: Big5 и т. Д. Конечно, UTF-16 и UTF-32 могут также содержать внутренние NUL, так что да, то, что я написал, относится к ним * к *. –