Как выдрать из UTF-8 текста указанное количество символов, DHCPep, 06-Дек-19, 21:55 [смотреть все]Здравствуйте!У меня такая задача возникла. Есть файл текстовый, в UTF-8. И я хочу из него вывести произвольный кусок текста. Т.е. если в файле N символов (не байт!), я хочу получить функцию substr(txt, K, M), где K<M<=N Всё это хочу сделать в консоли. Пробовал cut, он естественно не работает, т.к. cut -cK-M конечно считаем байтами. А у меня utf-8. Есть ли возможность получить результат как cut но для символов, а не байт? Желательно не внешними утилитами а из стандартного набора. Спасибо!
|
- Как выдрать из UTF-8 текста указанное количество символов, anon1999, 23:01 , 06-Дек-19 (1) +1
- Как выдрать из UTF-8 текста указанное количество символов, DHCPep, 23:33 , 06-Дек-19 (2)
> Может, сначала стоит перекодировать строку из UTF-8 в кодировку с фиксированной шириной > символа, > а потом выдирать оттуда подстроку?А как? Если например это текст "война и мир", где есть и французский язык и русский?
- Как выдрать из UTF-8 текста указанное количество символов, DHCPep, 23:34 , 06-Дек-19 (3)
> Может, сначала стоит перекодировать строку из UTF-8 в кодировку с фиксированной шириной > символа, > а потом выдирать оттуда подстроку?Или есть юникод с фиксированной шириной? Тогда да, было бы конвертировать в него, там выдрать N*2 (или 3) байт, затем перегнать обратно в обычный юникод. Но что за кодировка такая?
- Как выдрать из UTF-8 текста указанное количество символов, Аноним, 00:23 , 07-Дек-19 (5) +1
- Как выдрать из UTF-8 текста указанное количество символов, DHCPep, 12:20 , 07-Дек-19 (6)
> Что не так то?Проверил, действительно с utf-8 работает cut успешно, но это зависит от настроенной локали пользователя который запускает. Я это когда проверил под своим юзером, от которого работаю на компе и у которого всё настроено - ок. А в принципе мне надо это решение для скрипта, и работает этот скрипт в джейле, там никаких локалей у пользователя не настроено и там он выдаёт если на начало двухбайтового символа не попадает, то кракозябру. user$ cat ~/text.utf8 1234абвгд user$ cut -c5-7 ~/text.utf8 абв jail# cut -c5-7 /root/text.utf8 а� Ну и кроме этого ещё не подходит принципиально cut как инструмент для этого, т.к. он для каждой строки берёт этот диапазон, а мне надо имея текстовый файл получить его отгрызок от такого-то символа до такого-то.
|