Как выдрать из 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. > И я хочу из него вывести произвольный кусок текста. Т.е. если в > файле N символов (не байт!), я хочу получить функцию substr(txt, K, > M), где K<M<=N > Всё это хочу сделать в консоли. Пробовал cut, он естественно не работает, > т.к. cut -cK-M конечно считаем байтами. А у меня utf-8. > Есть ли возможность получить результат как cut но для символов, а не > байт? > Желательно не внешними утилитами а из стандартного набора. > Спасибо!Может, сначала стоит перекодировать строку из UTF-8 в кодировку с фиксированной шириной символа, а потом выдирать оттуда подстроку?
- Как выдрать из 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 текста указанное количество символов, anon1999, 23:47 , 06-Дек-19 (4) +1
>> Может, сначала стоит перекодировать строку из UTF-8 в кодировку с фиксированной шириной >> символа, >> а потом выдирать оттуда подстроку? > Или есть юникод с фиксированной шириной? Тогда да, было бы конвертировать в > него, там выдрать N*2 (или 3) байт, затем перегнать обратно в > обычный юникод. > Но что за кодировка такая?Есть: - UTF-16 (правда там есть нюансы с "суррогатными парами" символов); - UTF-32 - возможно её стоит посмотреть.
- Как выдрать из UTF-8 текста указанное количество символов, Аноним, 00:23 , 07-Дек-19 (5) +1
Чес слово, ничерта не понял. В смысле cut -c не работает с utf8 правильно??? [ diablopc@d200 ~ ]$ cat utf8.text абвгдежзилмнопрстуфхцчшщ[ diablopc@d200 ~ ]$ cut -c5-8 utf8.text дежз
Что не так то?
- Как выдрать из 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 как инструмент для этого, т.к. он для каждой строки берёт этот диапазон, а мне надо имея текстовый файл получить его отгрызок от такого-то символа до такого-то.
- Как выдрать из UTF-8 текста указанное количество символов, ыы, 20:44 , 07-Дек-19 (10)
>[оверквотинг удален] > user$ cat ~/text.utf8 > 1234абвгд > user$ cut -c5-7 ~/text.utf8 > абв > jail# cut -c5-7 /root/text.utf8 > а� > Ну и кроме этого ещё не подходит принципиально cut как инструмент для > этого, т.к. он для каждой строки берёт этот диапазон, а мне > надо имея текстовый файл получить его отгрызок от такого-то символа до > такого-то.устанавливайте локаль прямо в скрипте.
|