Быстрый и грязный Q: Могу ли я с уверенностью предположить, что байт кодовой точки UTF-8, UTF-16 или UTF-32 (символ) будет не пробелом ASCIIсимвол (если кодовая точка не представляет один)?
Я объясню:
Скажите, что у меня есть строка в кодировке UTF-8.Эта строка содержит несколько символов, для хранения которых требуется более одного байта.Мне нужно выяснить, являются ли какие-либо символы в этой строке символами пробела ASCII (пробел, горизонтальная табуляция, вертикальная табуляция, возврат каретки, перевод строки и т. Д. - Юникод определяет еще несколько символов пробела, но забудьте о них).
Итак, я делаю цикл по строке и проверяю, совпадает ли какой-либо из байтов с байтами, которые определяют пробельные символы.Возьмите, например, 0D (hex) для возврата каретки.Обратите внимание, что мы говорим здесь байты, а не символы.
Будет ли это работать?Будут ли кодовые точки UTF-8, где первый байт будет 0D, а второй - что-то еще - и эта кодовая точка не представляет возврат каретки?Может быть, наоборот?Будут ли кодовые точки, где первый байт является чем-то странным, а второй (или третий, или четвертый) байт равен 0D - и эта кодовая точка не представляет возврат каретки?
UTF-8 обратно совместим с ASCII, поэтому я очень надеюсь, что он будет работать для UTF-8.Из того, что я знаю об этом, возможно, но я не знаю деталей достаточно хорошо, чтобы сказать наверняка.
Что касается UTF-16 и UTF-32, я сомневаюсь, что это сработает вообще, но я почти ничего не знаю об их деталях, поэтому не стесняйтесь удивлять меня там ...
Причина для этого дурацкого вопроса в том, что у меня есть проверка кода для пробелов, которая работает для ASCII, и мне нужно знать, может ли он сломаться в Unicode.У меня нет выбора, кроме как проверить побайтово по ряду причин.Я надеюсь, что обратная совместимость с ASCII может дать мне хотя бы бесплатную поддержку UTF-8.