پرسش

ارور UnicodeEncodeError: چرا کدک ASCII نمی‌تونه کاراکتر u\\xa0 رو در موقعیت ۲۰ رمزگذاری کنه؟

UnicodeEncodeError: ascii codec cant encode character u\\xa0 in position 20

وقتی دارم با پایتون کار می‌کنم و سعی می‌کنم یک رشته خاص رو پردازش یا پرینت کنم، با ارور UnicodeEncodeError میگیرم. این ارور دقیقاً چیه و چطور می‌تونم حلش کنم؟

پاسخ
رضا دولتی عاشق برنامه نویسی و هوش مصنوعی!
بیوگرافی رضا دولتی

این ارور به این خاطر پیش میاد که کاراکتر u\xa0 در رشته شما یک کاراکتر غیرقابل نمایش هست که در واقع یک "فاصله غیرقابل شکستن" (non-breaking space) محسوب می‌شه و کدک ascii نمی‌تونه این کاراکتر رو به درستی پردازش کنه. به طور پیش‌فرض، پایتون سعی می‌کنه تا رشته‌ها رو با استفاده از کدک ascii پردازش کنه، اما چون ascii فقط می‌تونه کاراکترهایی با مقدار بین ۰ تا ۱۲۷ رو پردازش کنه، با این ارور مواجه می‌شید.

برای حل این مشکل، می‌تونید کدک مورد استفاده برای پردازش رشته رو به یک کدک دیگه‌ای مثل utf-8 تغییر بدید. utf-8 می‌تونه بیشتر کاراکترهای یونی‌کد رو پردازش کنه و بنابراین این ارور رو نمی‌ده. برای این کار، می‌تونید از متد encode یا decode استفاده کنید.

مثال:

# Converting string to a UTF-8 encoded string
text = u"This is a string with a non-breaking space \u00a0"
encoded_text = text.encode(utf-8)  # Encoding with utf-8
print(encoded_text)  # Now it prints without an error

همچنین، اگر قصد دارید که این رشته رو به یک فایل ذخیره کنید، مطمئن بشید که فایل رو هم با کدک utf-8 باز کنید:

# Writing the string to a file with UTF-8 encoding
with open(output.txt, w, encoding=utf-8) as f:
    f.write(text)

 

این کدها به شما کمک می‌کنه تا ارور UnicodeEncodeError رو رفع کنید و به راحتی رشته‌های خودتون رو پردازش و ذخیره کنید.

پاسخ: 1403/06/03
آخرین آپدیت: 1403/07/29