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


1

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

Я можу написати програму awk для цього, але чи можу я знати, чи є простіший спосіб?

PS. Я знайшов це нерозумно, що керівник і хвіст не підтримують кодування символів (змінна середовища LANG), в той час як інші інструменти, такі як вирізати , туалет , sed і awk всі підтримують кодування символів.


Ще одна річ, про яку потрібно думати - навіть якщо ви виводитимете цілі кодові точки, ви все одно зможете розділити базові символи з їх наступних символів. Якщо це проблема для вашої програми, вам потрібно зробити щось більш складне, ніж відповідь досі.
Richard Kettlewell

Відповіді:


0

Не впевнений, що це простіше, але це так:

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

Це перетворюється у форму Unicode з фіксованою шириною, так що 1000 завжди буде представляти цілі символи.


iconv (той, що входить у glibc) має помилку буферизації всього вхідного файлу, перш ніж робити будь-який вивід. Це має величезний вплив на продуктивність. Тим не менш, ваш підхід працює.
Wu Yongzheng
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.