View Full Version : فارسی نویسی در محیط vc
dolfas
شنبه 05 فروردین 1396, 16:11 عصر
سلام..
یک راهنمایی میخوام...میخوام یک متن رو به صورت فارسی وارد محیط سی ++ یا VC کنم و و این متن رو برنامه بنده بشناسه....لطفا کمک کنید درضمن من از لینوکس استفاده نمیکنم...ویندوز 10 هست و برنامه من هم ورژن 2017 C++ هست. کلا برای فارسی نویسی در محیط C++ کمک لازم دارم.
ممنون از هر گونه اطلاعات مفید شما
علی بهمنی جلالی
جمعه 11 فروردین 1396, 14:06 عصر
بسم الله الرحمن الرحیم
سلام
اگر اشتباه نکنم، برای اینکه یک نویسه (کاراکتر) بر روی نمایشگر نشانداده بشود، باید زیرساختهای مختلفی وجود داشته باشه، از قبیل اینکه مثلاً سیستمعامل برای آن نویسهٔ خاص یک کُد خاصی را در نظر بگیرد و قلم (فونت) مورد نظر با آن کُد خاص هماهنگ باشد تا بتواند آن نویسه را بر روی نمایشگر نشان دهد. این نویسهها با استانداردهای مختلفی عرضه میشدند از قبیل ASCII یا WINDOWS-1256 یا ... . دلیل عرضه این همه استاندارد مختلف این بود که در یک بایت، نمیشد بیش از ۲۵۶ نویسه را ذخیره کرد اما تعداد حروف در کل جهان بیش از ۲۵۶ نویسه است. به همین دلیل codepage های مختلفی بوجود آمد تا زبانهای مختلف را در کنار زبان انگلیسی اضافه کند. برای زبان عربی و فارسی همراه با انگلیسی هم codepage WINDOWS-1256 بوجود آمد. خوبی codepage ها این بود که در یک بایت ذخیره میشد به همین خاطر سیستمعاملها و برنامههای قدیمی میتوانستند به شرط پشتیبانی از codepage ها از آنها استفاده کنند. اما با بوجود آمدن اینترنت، مشکلات مختلف بروز کرد. مثلاً در یک صفحه نمیشد بیش از یک codepage استفاده کرد. با این مشکلات بود که یونیکد بوجود آمد. خود یونیکد دارای کدگذاریهای مختلفی است که معروفترینهای آنها:
utf-8 (این در اینترنت، پراستفادهترین است. سیستمعامل لینوکس از این استفاده میکند (البته خط فرمان پاورشِل که مایکروسافت برای لینوکس منتشر کرده، به صورت پیشفرض از utf-16 استفاده میکند))
utf-16 (زبان C# و جاوا از این به صورت پیشفرض استفاده میکنن. البته رابط گرافیکی ویندوز هم مثل windows form از این استفاده میکند)
utf-32
اطلاعات درباره یونیکد بسیار جالب است. برای اطلاعات بیشتر به unicode.org مراجعه کنید.
سیستمعاملها معمولاً نویسهها را در «رابط کاربری خط فرمان» و یا در «رابط کاربری گرافیکی» نشان میدهند.
۱- خط فرمان:
اگر بخواهید حرف فارسی را در خط فرمانی که از یونیکد پشتیبانی نمیکند نشان دهید. فایلی که برنامهنویسی کردهاید را با فُرمَت WINDOWS-1256 ذخیره و سپس کامپایل کنید. حالا اگر خط فرمان شما بر روی codepage WINDOWS-1256 باشه و اینکه خط فرمان از قلم (فونت) مناسب هم استفاده کند آنگاه حرف فارسی نشان داده خواهد شد. اما حالا یک مشکل دیگه بروز میکند و آن اینکه ممکن است حروف جدا جدا و از چپ به راست در خط فرمان چاپ شود. در این صورت یا نیاز هست که از خط فرمان جدید استفاده کنید، یا برنامه خود را به صورتی بسازید که توانایی تشخیص مکان در خط فرمان را داشته باشد یا اینکه خط فرمان خودتان را بسازید.
اگر خط فرمان شما از یونیکد پشتیبانی میکند باز چند مسئله مطرح میشود. اول اینکه تا چه اندازه از یونیکد پشتیبانی میکند. مثلاً آیا از الگوریتمهای یونیکد مثل CTL (که در زبان فارسی و عربی و... استفاده میشود ) یا CJK (که در زبان چینی، ژاپنی و کُرهای استفاده میشود) پشتیبانی میکند یا خیر. اگر پشتیبانی میکند شما با کامپایل فایل برنامهنویسی خود با فرمت utf-8 (یا در برخی زبانها با utf-16 یا utf-32 ) و اجرای آن با خط فرمانی که توانایی پشتیبانی از یونیکد دارد، میتوانید حروف فارسی (یا حروف دیگر یونیکُد) را ببینید.
۲- رابط کاربری گرافیکی:
خوشبختانه رابطهای گرافیکی معروف تا حدود بسیار زیادی از یونیکد و الگوریتمهای یونیکد پشتیبانی میکنند. برای سیپلاسپلاس میتوانید از کتابخانههای gtkmm یا Qt استفاده کنید.
نکته: در زبان سیپلاسپلاس char به اندازهٔ یک بایت فضا میگیرد. اگر از codepage WINDOWS-1256 استفاده میکنید میتوانید حرف «ب» رو به صورت زیر استفاده کنید.
char ch = 'ب'
اما اگر از utf-8 استفاده میکنید. حرف «ب» دارای دو بایت هست، به همین خاطر اگر شما از زبان سیپلاسپلاس جدید مثل C++11 یا C++14 استفاده میکنید، میتوانید به صورت زیر حرف «ب» را ذخیره کنید.
char16_t ch = 'ب'
یا به این صورت:
char16_t ch = u'ب'
البته یک کتابخانه بسیار مهم و خوب به اسم ICU وجود داره که امکانات یونیکُد را در اختیارتان قرار میدهد. مثلاً همین چند وقت پیش واحد اندازهگیری هکتار بهش اضافه شده بود. یا مثلاً تاریخ هجری خورشیدی دارد.
برای اطلاعات بیشتر، لینکهای زیر را ببینید:
http://barnamenevis.org/showthread.php?531958-%D8%A2%DB%8C%D8%A7-%D9%85%DB%8C%E2%80%8C%D8%AE%D9%88%D8%A7%D9%87%DB%8 C%D8%AF-%DB%8C%DA%A9-%D9%86%D9%88%DB%8C%D8%B3%D9%87-%D8%B1%D8%A7-%D8%AF%D8%B1-%D8%AA%D8%B1%D9%85%DB%8C%D9%86%D8%A7%D9%84-%D8%A7%D8%B2-%D8%B1%D8%A7%D8%B3%D8%AA-%D8%A8%D9%87-%DA%86%D9%BE-%DA%86%D8%A7%D9%BE-%DA%A9%D9%86%DB%8C%D8%AF%D8%9F-(-%D8%AF%D8%B1-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D9%88-%D8%A7%D8%AD%D8%AA%D9%85%D8%A7%D9%84%D8%A7%D9%8B-%D8%AF%D8%B1-%D9%85%DA%A9-)
http://barnamenevis.org/showthread.php?529241-%D8%AA%D8%B1%D9%81%D9%86%D8%AF-%DB%8C%DA%A9%DB%8C-%D8%A7%D8%B2-%D8%B1%D9%88%D8%B4%E2%80%8C%D9%87%D8%A7%DB%8C-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%86%DA%AF%D9%84%DB%8C%D8%B3%DB%8C-%D8%A8%D9%87-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%AF%D8%B1-C-%E2%80%8E-11-%D8%A8%D9%87-%D9%87%D9%85%D8%B1%D8%A7%D9%87-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-boost
http://barnamenevis.org/showthread.php?529168-چگونه-از-u16string-در-c-استفاده-کنیم؟
http://barnamenevis.org/showthread.php?482859-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A8%D9%87-%D8%B9%D9%86%D9%88%D8%A7%D9%86-integer
علی بهمنی جلالی
جمعه 11 فروردین 1396, 15:21 عصر
یک ویرایشگر وجود داره که درونش خط فرمان هم داره و از حروف فارسی هم در لینوکس تا حدود زیادی پشتیبانی میکنه (در ویندوز رو نمیدونم): https://code.visualstudio.com/
بعد از نصب این ویرایشگر، این افزونه را نصب کنید: https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools
راهنما: https://code.visualstudio.com/docs/languages/cpp
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.