2 votes

Utiliser split sans casser l'encodage

J'ai besoin de diviser un fichier. J'utilise généralement split mais cette fois, j'ai besoin que le fichier divisé ait le même type d'encodage que l'original. J'ai l'original :

eianni@ianni-desktop:~/Desktop$ file FCAna.txt 
FCAna.txt: ISO-8859 text, with CRLF line terminators

alors que les nouveaux le sont :

eianni@ianni-desktop:~/Desktop$ file xaa
xaa: ISO-8859 text, with CRLF line terminators
eianni@ianni-desktop:~/Desktop$ file xab
xab: Non-ISO extended-ASCII text, with CRLF line terminators

le deuxième n'est pas bon. Comment puis-je résoudre ce problème ? La commande exécutée est

split --lines=1588793 FCAna.txt

5voto

Ross Light Points 1994

Je pense que cela pourrait être dû à la façon dont file travaux. Lecture de la page de manuel :

Les jeux de caractères ASCII, ISO-8859-x, non-ISO 8-bit extended-ASCII (tels que ceux utilisés sur les systèmes Macintosh et IBM PC), UTF-8-encoded Unicode, UTF-16-encoded Unicode, et EBCDIC peuvent être distingués par les différentes plages et séquences d'octets qui constituent le texte imprimable dans chaque jeu.

Mon interprétation de cette déclaration est la suivante file La capacité de l'utilisateur à déterminer l'encodage utilisé est basée sur la présence de certains caractères dans le fichier texte qui rendent évident l'encodage. Ainsi, pour l'UTF, la taille des octets ou l'existence d'un caractère de type NOMENCLATURE pourrait être utilisé. Votre fichier texte d'origine peut avoir utilisé des caractères qui ne peuvent être codés que dans un jeu de caractères ASCII étendu (le symbole de la livre (£), par exemple) et donc file était de déterminer qu'il s'agissait d'un fichier ISO 8859. Mais maintenant que le fichier est divisé, ce symbole n'apparaît que dans le premier fichier et pas dans le second. Vous devriez pouvoir tester cette hypothèse en recherchant dans le texte les caractères "étendus" et en fractionnant à différents endroits.

À titre de test, j'ai fait ce qui suit :

[root@blah ~]# echo "this is a test of text encoding" > test_encoding.txt
[root@blah ~]# file test_encoding.txt
test_encoding.txt: ASCII text
[root@blah ~]# echo "£" >> test_encoding.txt
[root@blah ~]# file test_encoding.txt
test_encoding.txt: ISO-8859 text
[root@blah ~]#

Y a-t-il une raison pour laquelle vous avez besoin des encodages de fichier rapportés par file pour correspondre ?

0voto

cjc Points 24265

C'est un problème de terminaison de ligne. Peut-être que vous pouvez dire à Split d'interrompre chaque ligne avec l'option -l option ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X