xato UnicodeDecodeError: "utf-8" kodek 0 bayt 0 baytni kodlay olmaydi: yaroqsiz bosh bayt

https://github.com/affinelayer/pix2pix-tensorflow/tree/master/tools

Yuqoridagi saytdagi "process.py" ni tuzishda xatolik yuz berdi.

 python tools/process.py --input_dir data --            operation resize --outp
ut_dir data2/resize
data/0.jpg -> data2/resize/0.png

Orqaga olish (oxirgi qo'ng'iroq so'nggi):

File "tools/process.py", line 235, in 
  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

Xatoning sababi nima? Python versiyasi 3.5.2.

32

9 javoblar

Python, unicode string ( str ) uchun byte-array (bir bayt ni utf-8-kodli string deb ataydi) aylantirishga harakat qiladi. Albatta, bu jarayon utf-8 qoidalariga muvofiq dekodlashdir. Buni amalga oshirishda, u utf-8 kodli satrlarda ruxsat etilmagan bayt qatori bilan (u 0 holatida 0xff) uchraydi.

Hech qanaqa kodni bermaganligimiz sababli, biz faqatgina qolganlarni taxmin qilishimiz mumkin edi.

Yon suzgichidan tetiklash ishi fayldan o'qish ( contents = open (path) .read() ) bo'lgan deb taxmin qilish mumkin). Men bunga o'xshash usulda shunday qilishni taklif qilaman:

with open(path, 'rb') as f:
  contents = f.read()

open() da tartib-identifikatoridagi b faylida faylning ikkilik hisoblanishi kerakligini bildiradi, shuning uchun tarkibi baytlari . Hech qanday dekodlash tashabbusi shu tarzda amalga oshmaydi.

46
qo'shib qo'ydi
Men xato qilyapman "ValueError: mode string" br "emas, balki" r "," w "," a "yoki" U "bilan boshlanishi kerak
qo'shib qo'ydi muallif Unnikrishnan, manba
@Unnikrishnan Ok, undan keyin rb dan foydalaning (men buyurtma hech qanday ahamiyatga ega emas deb o'yladim, lekin hech bo'lmaganda ba'zi tizimlarda/versiyalarda ko'rinadi). Men o'z javobimni o'zgartirdim.
qo'shib qo'ydi muallif Alfe, manba
bayt 0xff 0 da fayl UTF-16da kodlangan degan ma'noni anglatishi mumkin, keyin ni ochiq (yo'l, kodlash = 'utf-16') f: Buning o'rniga
qo'shib qo'ydi muallif Nikolai R Kristiansen, manba

Ushbu echimlardan foydalaning, u belgilarni olib tashlash (ignabargandir) va ularsiz ularni qaytaradi. Buni faqat sizning ehtiyojingiz ularni aylantirmasliklari uchun ishlatishdan foydalaning.

with open(path, encoding="utf8", errors='ignore') as f:

Using errors='ignore' You'll just lose some characters. but if your don't care about them as they seem to be extra characters originating from a the bad formatting and programming of the clients connecting to my socket server. Then its a easy direct solution. reference

13
qo'shib qo'ydi
Dekode() da ishlaydi: contents = contents.decode ("utf-8", "ignore") Manba: docs.python.org/3/howto/unicode.html#the-string-type
qo'shib qo'ydi muallif naaman, manba

Bunga o'xshash muammo yuzaga kelgan bo'lsa, UTF-16 kodini ishlatish uchun yakunlandi. kodim pastda.

with open(path_to_file,'rb') as f:
    contents = f.read()
contents = contents.rstrip("\n").decode("utf-16")
contents = contents.split("\r\n")

bu fayl mazmunini import sifatida qabul qiladi, lekin u kodni UTF formatida qaytaradi. u erdan bu kod hal etiladi va chiziqlar bilan ajralib turadi.

11
qo'shib qo'ydi
Python-3da kodni kodini bilan ochiq kodli kod yordamida (path, encoding = 'utf-16') f
qo'shib qo'ydi muallif Nikolai R Kristiansen, manba

UTF-8 faylini UTF-8 kodi bilan kod hal qilishga urinayotganda yuz beradigan xato, bu bir xato bilan shug'ullanayotganda, men bu muammo bilan tanishib chiqdim.

With UTF-16 the first characther (2 bytes in UTF-16) is a Byte Order Mark (BOM), which is used as a decoding hint and doesn't appear as a character in the decoded string. This means the first byte will be either FE or FF and the second, the other.

Haqiqiy javobni aniqlagandan so'ng, qattiq tahrir qilindi.

8
qo'shib qo'ydi
Rahmat! Bu javob juda foydali bo'ldi.
qo'shib qo'ydi muallif Dirigo, manba

Iloji bo'lsa, faylni matn muharriridan oching va kodlashni UTF-8 ga o'zgartirmoqchiman. Aks holda dasturiy ta'minot darajasida OS darajasida bajaring.

2
qo'shib qo'ydi

O'qilgan faylning yo'lini tekshiring. Ish kodini taqdim etish uchun yo'l nomini o'zgartirmaguncha, kodim menga xatoliklarni berib turardi. Xato:

newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
1
qo'shib qo'ydi

Menda shunga o'xshash muammolar bor. Men tensorflouvda/modellarda/ob'ektiv_detekta bir misolni ishlatishga harakat qilaman va o'sha xabarni topdim. Python3 ni Python2 ga o'zgartirishga harakat qiling

1
qo'shib qo'ydi

faqat foydalaning

base64.b64decode(a) 

ning o'rniga

base64.b64decode(a).decode('utf-8')
1
qo'shib qo'ydi

Salom, "GoogleNews-vectors-negative300.bin.gz" faylini birinchi bo'lib yuklang, keyin uni ushbu buyruq bilan Ubuntu-da chiqaring: gunzip -k GoogleNews-vectors-negative300.bin.gz. [qo'lda chiqarib olish tavsiya qilinmaydi]. ikkinchidan, ushbu buyruqlarni piron 3 da qo'llashingiz kerak:

import gensim model = gensim.models.Word2Vec.load_word2vec_format('./model/GoogleNews-vectors-negative300.bin', binary=True) . I hope it will be useful.

0
qo'shib qo'ydi
Python
Python
372 ishtirokchilar

Bu guruh python dasturlash tilini muhokama qilish uchun. Iltimos, o'zingizni hurmat qiling va faqat dasturlash bo'yicha yozing. Botlar mavzusini @botlarhaqida guruhida muhokama qling! FAQ: @PyFAQ Offtopic: @python_uz_offtopic

Python offtopic group !
Python offtopic group !
150 ishtirokchilar

@python_uz gruppasining offtop gruppasi. offtop bo'lsa ham reklama mumkin emas ) Boshqa dasturlash tiliga oid gruppalar @languages_programming