Действительно ли возможно использовать разделение для создания символьных блоков из китайских unicode байтов?

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

Я знаю, что это не действительно, что Вы хотите, но это - то, что я сделал бы: можно пойти с Debian, стабильным для устойчивости, и установить только более новые версии определенных пакетов, в которых Вы нуждаетесь. Можно установить их из источника или добавить репозиторий тестирования / нестабильный репозиторий и использовать способное прикрепление. Но будьте осторожны со смешиванием репозиториев, оно могло бы уменьшить устойчивость системы.

4
06.02.2012, 20:10
3 ответа

Каждый символ три байта шириной, как показано в этом xxd вывод:

$ xxd chinese-bytes
0000000: e6b4 9ee5 baad e6b9 96                   .........

split -b3 работы для меня.

$ split -b3 chinese-bytes
$ echo xa?
xaa xab xac
$ cat xaa; echo
洞
$ cat xab; echo
庭
$ cat xac; echo
湖
3
27.01.2020, 20:56
  • 1
    Вы пытались добавить новую строку там? –  Ignacio Vazquez-Abrams 07.02.2012, 02:44
  • 2
    @IgnacioVazquez-Abrams С новой строкой это просто создает четвертый файл с новой строкой. Я не вижу, как это касается вопроса так или иначе. –  Chris Down 07.02.2012, 02:54
  • 3
    И затем это повреждает следующий символ после новой строки. –  Ignacio Vazquez-Abrams 07.02.2012, 02:56
  • 4
    @IgnacioVazquez-Abrams на Это не ссылаются нигде в вопросе. На самом деле заключительный абзац вопроса иллюстрирует пример, где нет ничего после новой строки, и все же существуют все еще требования его изменяющийся на символы ерунды. –  Chris Down 07.02.2012, 03:02
  • 5
    Хотя это отвечает на вопрос в самом узком возможном смысле (в силу самого факта 1 китайский символ = 3 байта), он существенно неправильно понимает самые основные аспекты unicode и обработки текста в целом (не говоря уже о вопросе), представляя его в лучшем случае бессмысленный и в худшем случае опасный (все укрепленные последующими комментариями). Просто тест с помощью 1 или 2 последовательных новых строк (т.е. 1 или два байта) между 3 байтами unicode символы, и игра закончена. Или полагайте, что почти все китайские тексты содержат некоторые латинские символы. (например, cat chinese-bytes chinese-bytes > tst2; split -b3 tst2 => мусор) –  michael 30.12.2017, 14:55

Насколько я знаю, все китайские символы 3 байта длиной при кодировании в UTF-8, нормальном кодировании Unicode на Unix. Но некитайские символы, такие как пробелы и новые строки могут быть другой шириной (основные управляющие символы, а также арабские формы цифры и другие, единственный широкий байт). split утилита только понимает постоянные числа байтов, таким образом, она сократит без разбора неровно.

Необходимо будет использовать более сложный инструмент для разделения каждых 42 символов. Вот отрывок Perl, который должен добиться цели (непротестированный). Обратите внимание, что это - обработки каждый символ одинаково: китайские счетчики символов для 1, новая строка - также.

perl -CDS -e '
    $n = 0;
    while (read STDIN, $buf, 42) {
        open OUT, sprintf("> output-$n.txt") or die;
        print OUT $buf;
        close OUT or die;
        ++$n;
    }'
2
27.01.2020, 20:56

В терминале Mac я использую egrep -o '.'

-1
27.01.2020, 20:56

Теги

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