https://github.com/affinelayer/pix2pix-tensorflow/tree/master/tools
Une erreur s'est produite lors de la compilation de "process.py" sur le site ci-dessus.
python tools/process.py --input_dir data -- operation resize --outp
ut_dir data2/resize
data/0.jpg -> data2/resize/0.png
Traceback (appel le plus récent en dernier):
File "tools/process.py", line 235, in <module>
main()
File "tools/process.py", line 167, in main
src = load(src_path)
File "tools/process.py", line 113, in load
contents = open(path).read()
File"/home/user/anaconda3/envs/tensorflow_2/lib/python3.5/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
Quelle est la cause de l'erreur? La version de Python est 3.5.2.
Python tente de convertir un tableau d'octets (un bytes
qu'il considère comme une chaîne codée en utf-8) en une chaîne unicode (str
). Ce processus est bien sûr un décodage selon les règles utf-8. Lorsqu'il tente cela, il rencontre une séquence d'octets qui n'est pas autorisée dans les chaînes codées en utf-8 (à savoir, cette 0xff à la position 0).
Puisque vous n’avez fourni aucun code que nous puissions examiner, nous ne pouvons que deviner le reste.
À partir de la trace de la pile, on peut supposer que l’action déclencheuse était la lecture d’un fichier (contents = open(path).read()
). Je propose de recoder ceci de la manière suivante:
with open(path, 'rb') as f:
contents = f.read()
Que b
dans le spécificateur de mode de open()
indique que le fichier doit être traité comme binaire, donc contents
restera un bytes
. Aucune tentative de décodage ne se produira de cette façon.
Utilisez cette solution, elle supprimera (ignorera) les caractères et renverra la chaîne sans eux. Utilisez-le uniquement si votre besoin est de les dépouiller et non de les convertir.
with open(path, encoding="utf8", errors='ignore') as f:
Utilisation de errors='ignore'
Vous ne perdrez que quelques caractères. mais si vous ne vous en souciez pas, car ils semblent être des caractères supplémentaires provenant du mauvais formatage et de la mauvaise programmation des clients se connectant à mon serveur de socket. Ensuite, c'est une solution directe facile. référence
Avait un problème similaire à celui-ci, a fini par utiliser UTF-16 pour décoder. mon code est ci-dessous.
with open(path_to_file,'rb') as f:
contents = f.read()
contents = contents.rstrip("\n").decode("utf-16")
contents = contents.split("\r\n")
cela prendrait le contenu du fichier comme une importation, mais renverrait le code au format UTF. de là, il serait décodé et séparé par des lignes.
Je suis tombé sur ce fil alors que je rencontrais la même erreur. Après quelques recherches, je peux le confirmer. Il s’agit d’une erreur qui se produit lorsque vous essayez de décoder un fichier UTF-16 avec UTF-8.
Avec UTF-16, le premier caractère (2 octets en UTF-16) est une marque d'ordre d'octet (BOM) , utilisée comme indication de décodage et n'apparaissant pas en tant que caractère dans la chaîne décodée. . Cela signifie que le premier octet sera soit FE ou FF et le second, l’autre.
Fortement édité après avoir découvert la vraie réponse
Lire (r) le fichier CSV details.csv et encoder par tf8. si erreur se produit ignorer l'erreur, Ceci est simplement effectué par le code suivant.
with open('details.csv', 'r',encoding="utf8", errors='ignore') as csvDataFile:
csvReader = csv.DictReader(csvDataFile)
utiliser seulement
base64.b64decode(a)
au lieu de
base64.b64decode(a).decode('utf-8')
Si vous êtes sur un Mac, vérifiez si vous avez un fichier caché, .DS_Store. Après avoir supprimé le fichier, mon programme a fonctionné.
Utilisez le format de codage ISO-8859-1 pour résoudre le problème.
Vérifiez le chemin du fichier à lire. Mon code continuait à me donner des erreurs jusqu'à ce que je change le nom du chemin en répertoire de travail actuel. L'erreur était:
newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
HitHere, vous devez d'abord charger le fichier "GoogleNews-vectors-negative300.bin.gz", puis l'extraire à l'aide de cette commande dans Ubuntu: gunzip -k GoogleNews-vectors-negative300.bin.gz. [extraire manuellement n'est jamais recommandé]. deuxièmement, vous devriez appliquer ces commandes dans pyrhon 3:
import gensim model = gensim.models.Word2Vec.load_Word2vec_format('./model/GoogleNews-vectors-negative300.bin', binary=True) .
J'espère que cela vous sera utile.
si vous recevez des données d'un port série, assurez-vous que vous utilisez le bon débit (et les autres configs): décodage utilisant (tf-8), mais une configuration incorrecte générera la même erreur
UnicodeDecodeError: le codec 'utf-8' ne peut pas décoder l'octet 0xff en position 0: octet de début non valide
pour vérifier la configuration de votre port série sous Linux, utilisez: stty -F /dev/ttyUSBX -a