У меня есть большие текстовые файлы в UTF8, которые содержат смесь символов ASCII (поэтому UTF8 будет использовать для кодирования 1 байт) и более высоких кодовых точек, требующих до четырех байтов (AFAIU). Я хотел бы «очистить» некоторые части файла, то есть перезаписать части текста с пробелами (U + 0020).
Я, конечно, могу переписать весь файл, но они могут быть размером в гигабайты. Мне нужно перезаписать только несколько символов посередине, так что это выглядит большой тратой.
Проблема в том, как работать с многобайтовыми символами, не нарушая схему кодирования. Например, символ μ (U + 03B C, двоичный: 0011 1011 1100), для этого требуется два байта. Я не могу просто заменить первый байт на U + 020 и оставить второй байт болтающимся в файле, не так ли? Есть ли в UTF8 понятие «пустого» / «пропущенного» / «неиспользуемого» байта?
Думаю, замена многобайтовых символов на соответствующее количество пробелов будет работать, но я бы предпочел заменить их на если возможно, одиночный.