Замените многобайтовый символ однобайтовым кодом (например, пробелом) в середине большого файла UTF8. - PullRequest
1 голос
/ 06 мая 2020

У меня есть большие текстовые файлы в UTF8, которые содержат смесь символов ASCII (поэтому UTF8 будет использовать для кодирования 1 байт) и более высоких кодовых точек, требующих до четырех байтов (AFAIU). Я хотел бы «очистить» некоторые части файла, то есть перезаписать части текста с пробелами (U + 0020).

Я, конечно, могу переписать весь файл, но они могут быть размером в гигабайты. Мне нужно перезаписать только несколько символов посередине, так что это выглядит большой тратой.

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

Думаю, замена многобайтовых символов на соответствующее количество пробелов будет работать, но я бы предпочел заменить их на если возможно, одиночный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...