Até onde eu sei, todos os caracteres chineses têm 3 bytes de comprimento quando codificados em UTF-8 , o codificação Unicode normal no unix. Mas os caracteres não-chineses, como espaços e novas linhas, podem ter uma largura diferente (os caracteres básicos de controle, bem como os formulários com dígitos arábicos e outros, têm um único byte). O utilitário split
só entende números fixos de bytes, por isso vai cortar indiscriminadamente fora de alinhamento.
Você precisará usar uma ferramenta mais sofisticada para dividir cada 42 caracteres. Aqui está um trecho de Perl que deve fazer o truque (não testado). Note que trata cada caractere igualmente: um caractere chinês conta para 1, assim como uma nova linha.
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;
}'