ورود

View Full Version : سوال: حل مشكل خطا تبديل به wchar در پروژه يونيكد



Jenab4372
شنبه 03 مرداد 1388, 20:49 عصر
سلام
پروژه من به صورت Unicod هست و هنگام كامپايل براي كدهاي زير



m_sCount.Format("%d",m_iCount);

m_sTime.Format( "%d %d %d", curTime.GetHour(),curTime.GetMinute(),curTime.GetS econd());



دو خطا به شكل زير مي گيرد كه با تغيير به مولتي بايت درست مي شود ولي فارسي پنجره به هم مي خورد.



error C2664: 'void ATL::CStringT::Format(const wchar_t *,...)' : cannot convert parameter 1 from 'const char [9]' to 'const wchar_t *'

error C2664: 'void ATL::CStringT::Format(const wchar_t *,...)' : cannot convert parameter 1 from 'const char [3]' to 'const wchar_t *'




حالا دو سئوال دارم
1-آيا در حالتي مولتي بايت راهي براي فارسي نويسي درست نيست؟
2-چطوري در حالت Unicode اين دو مشكل و خطا را تصحيح نمايم؟(لطفا كد كاملي كه جايگزين اين كدها كنم بنويسيد)
با تشكر از راهنمايي شما

Nima_NF
شنبه 03 مرداد 1388, 22:03 عصر
از آنجایی که این سوال تکراری ترین سوال هست که صدها مرتبه پرسیده شده است این تاپیک بعد از مشاهده شدن حذف خواهد شد.

جواب سوال شما در FAQ شماره ۶ (http://barnamenevis.org/forum/showthread.php?t=166590)

موفق باشید
ً

Jenab4372
یک شنبه 04 مرداد 1388, 08:16 صبح
سلام
اما شما اين سئوال منو پاسخ نداديد!
آيا در حالتي مولتي بايت راهي براي نمايش صحيح كاركترهاي فارسي وجود دارد يا خير فقط بايد از يونيكد استفاده كرد؟

Nima_NF
یک شنبه 04 مرداد 1388, 20:20 عصر
اگر منظورتان این هست که به شکل عادی بتوانید در حالت multi-byte فارسی بنویسید و نمایش دهید، خیر. فلسفه یونیکد برای همین هست، علاوه بر آن حتی سیستم عامل نیز باید یونیکد را پشتیبانی کند.

اما اگر می خواهید ببینید که کلا راهی وجود دارد آن وقت جواب بلکه هست. به این شکل که شما باید از فونت های خاص فارسی استفاده کنید که تمامی حروف را به انواع حالات (چسبیده و جدا و کوتاه و... ) در خود داشته باشد و در حالت muti-byte طوری برنامه را بنویسید که تک تک حروف را بتوانید در کارکتر های اسکی وارد کنید و نمایش دهد. یعنی کلا همه چیز را باید خودتان طراحی کنید و این طور نیست که بتوانید طبق روال عادی با رشته ها کار کنید.
با این حال توابعی برای تبدیل این دو به هم وجود دارند مانند ‌WideCharToMultiByte و MultiByteToWideChar

nickaein.i
سه شنبه 13 مرداد 1388, 23:19 عصر
قبل از رشته های ثابت مثل "d%" یه حرف L قرار بدین تا مشکل حل بشه. مثلاً بجای:

[
printf("Hello");بنویسید


printf(L"Hello");