pytse-client
pytse-client copied to clipboard
مشکل در UnicodeEncode
مواجه شدن با خطا در حین دریافت اطلاعات از کلاس 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.
در انتها، شاید هم حدس من در مورد خطای رخ داده اشتباه باشه.
با تشکر
سلام، دقیقا این مشکلی که گفتید وجود داره یک سری کاراکتر هایی که توی سایت بورس هست توی کیبرد ما نیست. برای حل این توی کتابخانه ما این کاراکتر هارو جایگزین میکنیم. مرسی از توضیحات کامل.
این اروری که پیش اومده رو نمیدونم درست میفهمم یا نه اما بنظر میاد کاراکتر هایی که اون کلمه داره رو پاورشل یا پایتون روی ویندوز نمیتونن پرینت کنند. فکر کنم راه حلی که میگید برای جایگزین کردن اینجا هم جواب بده.
من فکر میکنم الان کد پایتون خروجیای که میده یونیکد هست اما پاورشل یا پایتون ویندوز دیفالت این رو در نظر نمیگیره. اطلاعات بیشتر درباره یونیکد: 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
سلام مجدد اگه امکانش هست یک ایمیل به من بزن تا بتونیم یه ارتباط بگیریم. [email protected] من خیلی نتونستم متوجه معماری کدتون بشم. توی این تعطیلات میخوام وقت بذارم بیشتر روی این موضوع کار کنم. از نظر تکنیکال و کار با داده و ساختار دیتاها باید بیشتر بفهممش.