Инструмент Unix для вывода первых n символов в кодированном файле UTF-8

1839
Wu Yongzheng

Я хочу напечатать первые 1000 символов в файле в кодировке UTF-8. Я знаю, что инструмент head может печатать первые n байтов файла, но он может вырезать символ посередине, чтобы в конце я получил искаженный вывод.

Я могу написать программу awk для этого, но могу ли я узнать, есть ли какой-нибудь более простой способ?

PS. Я считаю необоснованным, что голова и хвост не поддерживают кодировку символов (переменная среды LANG), в то время как другие инструменты, такие как cut, wc, sed и awk, поддерживают кодировку символов.

1
Еще одна вещь, о которой стоит подумать - даже если вы выводите целые кодовые точки, вы все равно можете отделить базовые символы от их последующих комбинирующих символов. Если это проблема для вашего приложения, вам нужно сделать что-то более сложное, чем ответ. Richard Kettlewell 11 лет назад 0

1 ответ на вопрос

0
Barnaby Shearer

Не уверен, что это проще, но это мой путь:

cat file | iconv -t UTF-32 | head -c $[1000 *4+4] | iconv -f UTF-32 

Это преобразует Unicode в форму с фиксированной шириной, так что 1000 всегда будет представлять целые символы.

iconv (включенный в glibc) имеет ошибку буферизации всего ввода перед выполнением любого вывода. Это оказывает огромное влияние на производительность. Тем не менее, ваш подход работает. Wu Yongzheng 11 лет назад 0

Похожие вопросы