pytse-client icon indicating copy to clipboard operation
pytse-client copied to clipboard

مشکل در UnicodeEncode

Open alireza-solouk opened this issue 2 years ago • 2 comments
trafficstars

مواجه شدن با خطا در حین دریافت اطلاعات از کلاس Tiker

با سلام و خسته نباشید من تازه با این کتابخانه آشنا شدم چند روزه اول اینم بگم ممنونم که یه اینطور پروژه‌ای شروع شده و به نظرم خیلی نیاز بود

من یه مدت برای دسترسی به دیتاهای بورس جاوااسکریپت کار کردم.

اونجا متوجه شدم که وقتی می‌خوای با نام شرکت‌ها و یا حروف فارسی تو قسمت فیلتر نویسی کار کنی اصلا نباید تایپ کنی و همه رو باید کپی کنی. چون یونی کد و از این چیزا رو ساپورت نمی‌کنه و باید UTF-8 باشه و ... . مثلا برای اینکه بتونه نام یک نماد رو فیلتر کنه اگه برای مثال (l18) == "نوری" قرار می‌دادی، اگر "نوری" رو تایپ کرده بودی چیزی رو توی فیلتر نشون نمی‌داد ولی اگه کلمه "نوری" رو از روی سایت خودش کپی کرده بودی برات نشون میداد به نظرم شاید این موضوع به کارت بیاد.

الان داشتم با کلاس Ticker یه تست می‌گرفتم ببینم چه دیتاهایی رو بر می‌گردونه فعلا توی ticker.title و ticker.group_name برام ارور encode فرستاد اولین چیزی که به ذهنم اومد همینه که بالا توضیح دادم.

اینم از ارورهایی که گرفتم print(ticker.title) # \u0646\u0627\u0645 \u0634\u0631\u06a9\u062a \u067e\u062a\u0631\u0648\u0634\u064a\u0645\u064a \u0646\u0648\u0631\u064a (\u0646\u0648\u0631\u064a) UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-3: character maps to

print(ticker.group_name) # \u0646\u0627\u0645 \u06af\u0631\u0648\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0634\u064a\u0645\u064a\u0627\u064a\u064a UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-5: character maps to

تا اینجا متوجه شدم که کتابخانه Encoding نمیتونه کاراکترها رو بشناسه مشکل هم توی Python\Python311\Lib\encodings\cp1252.py هست. ارور هم به این دلیل هست که این کاراکترها توی متغیر decoding_table داخل فایل cp1252.py وجود نداره. قاعدتا یا باید کاراکترها به این decoding_table اضافه بشن (که نمی‌شه این کار رو کرد و توی یه کتابخانه استاندارد دست برد) و یا اینکه باید یه جایی توی کلاس‌ها و توابع خودتون اونجایی که داری مپینگ می‌کنی، utf_8.py رو هم آدرس دهی کنی تا کاراکترهایی که cp1252.py نمیتونه مپ کنه رو utf_8.py مپ کنه.

ببخشید از اونجایی که تازه با آناتومی کد شما آشنا شدم و خیلی وقته از python دور هستم و خیلی چیزا داره کم کم یادم میاد، بیشتر از این چیزی به ذهنم نمی‌رسه.

راستی یادم رفت از پایتون 3.11 دارم استفاده می کنم. سیستم عامل ویندوز 10، توی VSC دارم تست می‌گیرم و از ترمینال‌های CMD و Powershell استفاده می‌کنم. بیشتر CMD.

در انتها، شاید هم حدس من در مورد خطای رخ داده اشتباه باشه.

با تشکر

alireza-solouk avatar Apr 16 '23 22:04 alireza-solouk

سلام، دقیقا این مشکلی که گفتید وجود داره یک سری کاراکتر هایی که توی سایت بورس هست توی کیبرد ما نیست. برای حل این توی کتابخانه ما این کاراکتر هارو جایگزین میکنیم. مرسی از توضیحات کامل.

این اروری که پیش اومده رو نمیدونم درست میفهمم یا نه اما بنظر میاد کاراکتر هایی که اون کلمه داره رو پاورشل یا پایتون روی ویندوز نمیتونن پرینت کنند. فکر کنم راه حلی که میگید برای جایگزین کردن اینجا هم جواب بده.

من فکر میکنم الان کد پایتون خروجی‌ای که میده یونیکد هست اما پاورشل یا پایتون ویندوز دیفالت این رو در نظر نمیگیره. اطلاعات بیشتر درباره یونیکد: https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/

شاید با ست کردن همچین چیزی این مشکل حل بشه، نمیدونم این رو الان ویندوز ندارم تست کنم ولی اگه میشه چک کنید که ایا کلا توی اون ترمینال میشه با پایتون کاراکترهای اسم رو سهم رو پرینت کرد یا نه. اگر کدی که ارور میخوره رو هم بنویسید خوب میشه. https://stackoverflow.com/a/28041598/6183805

Glyphack avatar Apr 18 '23 10:04 Glyphack

سلام مجدد اگه امکانش هست یک ایمیل به من بزن تا بتونیم یه ارتباط بگیریم. [email protected] من خیلی نتونستم متوجه معماری کدتون بشم. توی این تعطیلات می‌خوام وقت بذارم بیشتر روی این موضوع کار کنم. از نظر تکنیکال و کار با داده و ساختار دیتاها باید بیشتر بفهممش.

alireza-solouk avatar Apr 19 '23 07:04 alireza-solouk