J'ai des fichiers qui sont corrompus avec ce symbole:
^ @
Cela ne fait pas partie de la ficelle; ce n'est pas consultable. Comment remplacer ce symbole par rien ou comment supprimer ce symbole?
Voici un exemple de ligne d'un fichier:
^@F^@i^@l^@e^@n^@a^@m^@e^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@:^@ ^@^M^@
la source
Je ne pense pas que vos fichiers sont corrompus. Votre exemple de ligne ressemble à du texte normal avec des octets nuls entre chaque caractère. Cela suggère qu'il s'agit d'un fichier texte encodé au format UTF-16 mais que la marque d'ordre des octets est manquante au début du fichier. Voir http://en.wikipedia.org/wiki/Byte-order_mark
Supposons que j'ouvre le Bloc-notes, tapez le mot 'nomfichier' et l'enregistre en tant que Big-endian Unicode. Un vidage hexadécimal de ce fichier ressemble à ceci:
Si j'ouvre ce fichier dans Vim, tout se passe bien: les octets 'fe ff' indiquent à Vim comment le fichier est codé. Supposons maintenant que je crée un fichier contenant exactement la même séquence d'octets, mais sans le 'fe ff' initial. Vim insère ^ @ (ou <00>, selon votre configuration), à la place des octets nuls; Le bloc-notes insère des espaces.
Donc, plutôt que de supprimer les valeurs NULL, vous devriez vraiment chercher à ce que Vim interprète correctement le fichier. Vous pouvez faire en sorte que Vim recharge le fichier avec le bon codage avec la commande:
la source
Cela a réellement fonctionné pour moi au sein de vim:
la source
<Ctrl-V><Ctrl-2>
(ainsi que celui avec<Ctrl-Shift-2>
) de travailler non plus, mais cela a fonctionné.Ce 'symbole' représente un caractère NULL, avec la valeur ASCII 000.
C'est difficile à enlever avec vim, essayez
la source
Comme d'autres l'ont noté, il s'agit d'octets nuls (ASCII 00). Sous Linux, pour entrer des valeurs ASCII dans vim, appuyez sur Ctrl-V, suivi de la valeur octale à 3 chiffres de n’importe quel caractère. Pour remplacer tous les octets nuls, utilisez:
:%s/
Ctrl-V000//g
(sans espaces).
De même, vous pouvez rechercher des valeurs NULL avec:
/
Ctrl-V000
Dans les deux cas, les zéros ne seront pas affichés au fur et à mesure que vous les tapez, mais après avoir entré les trois, ils s'afficheront
^@
. Sur les terminaux de couleur, il sera indiqué en bleu pour indiquer qu'il s'agit d'un caractère de contrôle.la source
FWIW, dans mon cas, j’ai dû utiliser vim on cygwin pour éditer un fichier texte créé sur un mac. La solution acceptée ne fonctionnait pas pour moi, mais était proche. Selon la page wiki de Vim sur l'utilisation de Unicode , il existe une différence entre les versions Big Endian et Little Endian de l'octet de nomenclature. Donc, je devais explicitement dire
vim
d'utiliser une version Little Endian de l'encodage de la nomenclature.Ce n’est qu’après avoir choisi le bon encodage que j’ai converti le format de fichier (fins de ligne)
dos
afin de pouvoir éditer le fichier dans l’éditeur Windows. Essayer de définir la réinitialisation du format de fichier avant de spécifier l'encodage m'a donné du chagrin. Voici la liste complète des commandes que j'ai utilisées:la source
La solution acceptée ne fonctionnait pas pour moi. J'ai fait passer le fichier par vim à la
tr
place:Cela fonctionnerait également bien avec le mode visuel (il suffit de taper
:!tr -d '\000'
) ou sur une plage de lignes:la source
^@
Ce n'est pas un mauvais personnage si vous utilisez un encodage approprié, mais si vous voulez le supprimer, essayez:tr -d '\000'
sed 's/\000//g'
Pour convertir votre fichier au format Unix / Linux avant tout traitement, essayez:
dos2unix filename
- rhel et autresdos2ux filename [newfilename]
- HP-UXla source
En plus de la réponse de @ jrb, dans Vim, le codage de caractères du fichier est détecté en fonction de l'option fileencodings. (notez le 's' à la fin du codage de fichier)
C'est-à-dire que, sous Windows, la valeur par défaut de l'
fileencodings
option estucs-bom
:vérifie si la nomenclature existe au début du fichier.
Si la nomenclature existe, «lisez le codage de caractères du fichier en dehors de la nomenclature».
Si la nomenclature n'existe pas (et dans ce cas, cela signifierait également que tous les codages de caractères spécifiés dans l'
fileencodings
option ne correspondent pas), lisez le fichier avec le codage de caractères spécifié dans l'encoding
option. Le caractère encodage par défaut pour l'encoding
option est:latin1
. Maintenant, comme illatin1
s’agit du codage de caractères d’ une longueur d’ octets , tous les octets du fichier sont deslatin1
caractères valides (même leNul
caractère^@
que vous voyez *).* - en fait,
^@
est le caractère de nouvelle ligne dans le texte du tampon de Vim, pas le caractère Nul.La bonne façon de lire le fichier est de spécifier manuellement le codage de caractères au format UTF-16 (car il semble que UTF-16 est le codage de caractères approprié dans ce cas).
la source