Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

مشکل در UnicodeEncode #195

Open
alireza-solouk opened this issue Apr 16, 2023 · 2 comments
Open

مشکل در UnicodeEncode #195

alireza-solouk opened this issue Apr 16, 2023 · 2 comments
Labels
bug Something isn't working

Comments

@alireza-solouk
Copy link

مواجه شدن با خطا در حین دریافت اطلاعات از کلاس 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 alireza-solouk added the bug Something isn't working label Apr 16, 2023
@Glyphack
Copy link
Owner

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

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

من فکر میکنم الان کد پایتون خروجی‌ای که میده یونیکد هست اما پاورشل یا پایتون ویندوز دیفالت این رو در نظر نمیگیره. اطلاعات بیشتر درباره یونیکد:
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

@alireza-solouk
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants