View Full Version : مشکل با زبان فارسی در ویژوال استادیو
chikar
چهارشنبه 10 دی 1393, 19:35 عصر
سلام
داخل ویژوال استادیو 2010 موقع استفاده از زبان فارسی، بعد از کامپایل، نوشته ام به صورت ؟؟؟؟؟؟؟ (علامت سوال) نمایش داده می شود! چه در استفاده از نوشته فارسی در set Text ویجت ها و چه در فایل ها، تو کیوت کریتور این مشکل رو ندارم.
از دستورات این چنینی هم استفاده کردم فایده ای نداشته
QString::fromUtf8
تو ویژوال استادیو از file -> advance save option هم استفاده کردم و حالت encoding رو به utf-8 و چندین مورد دیگه تغییر دادم جواب نداد
نمی خوام نوشته هام رو به صورتی که QApplication::translate (مثل دیزاینر) می خونه به صورت کد مثلا 133 ذخیره کنم
نمونه کد مربوط به فایل ها:
QString unicodeString = "نوشته فارسی من به صورت علامت سوال ذخیره می گردد";
QFile fileOut("qt_unicode3.txt");
fileOut.open(QIODevice::ReadWrite | QIODevice::Text);
QTextStream streamFileOut(&fileOut);
streamFileOut.setCodec("UTF-8");
streamFileOut.setGenerateByteOrderMark(true);
streamFileOut << unicodeString;
streamFileOut.flush();
fileOut.close();
حامد مصافی
چهارشنبه 10 دی 1393, 20:30 عصر
QString unicodeString = QString::fromUtf8("نوشته فارسی من به صورت علامت سوال ذخیره می گردد");
chikar
چهارشنبه 10 دی 1393, 20:53 عصر
QString unicodeString = QString::fromUtf8("نوشته فارسی من به صورت علامت سوال ذخیره می گردد");
جواب نمی ده!
chikar
جمعه 12 دی 1393, 09:53 صبح
واقعا کسی تا به حال به این مشکل برنخورده و راه کاری برای حل نداره،
حداقل کمی به این مشکل فکر کنید شاید بعداً برای شما هم پیش بیاد
کامبیز اسدزاده
جمعه 12 دی 1393, 10:22 صبح
سلام
دوست عزیز شما کد زیر رو در فایلی که مربوط به فرم یا سورس برنامه هستش قرار بدید نتیجه رو اعلام کنید.پ
#pragma execution_character_set("utf-8")
chikar
جمعه 12 دی 1393, 10:46 صبح
سلام
دوست عزیز شما کد زیر رو در فایلی که مربوط به فرم یا سورس برنامه هستش قرار بدید نتیجه رو اعلام کنید.پ
#pragma execution_character_set("utf-8")
سلام نه متاسفانه جواب نداد، در editor ویژوال استادیو 2010 متن فارسی نمایش داده می شه اما بعد از کامپایل ؟؟؟؟ نشون داده می شه!
warning: unknown pragma
اما در ویژوال استادیو 2013 به نحو احسن و عالی جواب داد
ممنون که جواب دادید
chikar
جمعه 12 دی 1393, 10:56 صبح
آیا امکانش هست که خطا از PDB فایل باشه؟!
omid_kma
جمعه 12 دی 1393, 14:26 عصر
من از این روش استفاده می کنم درست هم کار می کنه :
QString::fromWCharArray(L"می")
البته زمان هایی که فارسی و انگلیسی مخلوط نوشته میشه کار نمی کنه برای حل اون باید کد unicode حروف فارسی رو بزارید .
روش استانداردتر می تونه این باشه که بجای فارسی انگلیسی بنوسید و در tr() قرار بدید و با استفاده از ابزار Qt Linguist برنامه رو ترجمه کنید .
حامد مصافی
جمعه 12 دی 1393, 16:18 عصر
encoding فایل مورد نظر رو بررسی بکن برادر. برای مثال با ++Notepad. من سالهاست اینطوری با کیوت کار میکنم. هیچ مشکلی نباید وجود داشته باشه
chikar
جمعه 12 دی 1393, 16:18 عصر
من از این روش استفاده می کنم درست هم کار می کنه :
QString::fromWCharArray(L"می")
البته زمان هایی که فارسی و انگلیسی مخلوط نوشته میشه کار نمی کنه برای حل اون باید کد unicode حروف فارسی رو بزارید .
روش استانداردتر می تونه این باشه که بجای فارسی انگلیسی بنوسید و در tr() قرار بدید و با استفاده از ابزار Qt Linguist برنامه رو ترجمه کنید .
ممنون جواب داد،عالی بود، حتی برای مخلوط انگلیسی و فارسی و اعداد!
خیلی لطف کردی آقا امید
فقط امکانش هست یه مثال بزنید برای تبدیل "حروف فارسی" به unicode و خوندن اون رو؟
در tr() یعنی چی انگلیسی بگذاریم، منظورتون معنی لغت فارسی اون به صورت انگلیسی است یا فینگلیش؟
chikar
جمعه 12 دی 1393, 16:24 عصر
encoding فایل مورد نظر رو بررسی بکن برادر. برای مثال با ++Notepad. من سالهاست اینطوری با کیوت کار میکنم. هیچ مشکلی نباید وجود داشته باشه
encoding فایل بر روی utf-8 هست، حتی من خود فایل رو توی notepad بر روی utf-8 قرار دادم و دوباره ذخیره کردم، برخی از تنظیمات ویژوال استادیو هم که بر روی utf-8 و حتی unicode قرار گرفت، فایده ای نداشت، حتی کل پروژه رو دوباره با save as با فرمت utf-8 , یا unicode ولی جواب نداد
حالا این آقا امید یه راه کار برای حل داده که جواب داد
مرسی
omid_kma
جمعه 12 دی 1393, 17:25 عصر
ممنون جواب داد،عالی بود، حتی برای مخلوط انگلیسی و فارسی و اعداد!
خیلی لطف کردی آقا امید
فقط امکانش هست یه مثال بزنید تبدیل حروف فارسی به unicode و خوندن اون رو؟
در tr() یعنی چی انگلیسی بگذاریم، منظورتون معنی لغت فارسی اون به صورت انگلیسی است یا فینگلیش؟
هیچی حالا که کار می کنه لازم نیست unicode
من قبلا یک مشکل داشتم می خواستم یکسری جمله رو بر اساس یکسری کاراکتر تقسیم کنم .
کاراکتر ها رو به این شکل تعریف می کردم کار نمی کرد :
QString filters = QString(" \n,;!*&@#'$%^.\t*/+:\"()[]=?-{}<>_") +
QString::fromWCharArray(L"؛؟،ˈ»«");
نهایتا مجبور شدم این طوری بنویسم
QString filters = QString(" \n,;!*&@#'$%^.\t*/+:\"()[]=?-{}<>_") +
QString::fromWCharArray(L"\x60c\x61f\x61b\x2c8\x0bb\x0ab");
یعنی به جای هر کاراکتر کد یونیکد (http://unicode-table.com/en/) . حالا اگر برای شما حل شد و مشکلی نداره دیگه نیازی نیست این کار.
در مورد linguist هم این جا رو ببینید
http://doc.qt.io/qt-5/qtlinguist-index.html
یک مثال هم آقای مصافی قبلا گذاشته بودن :
http://barnamenevis.org/showthread.php?295154-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D8%B2%D8%A8%D8%A7%D9%86-%D9%85%D8%AD%DB%8C%D8%B7-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%AF%D8%B1-%D8%AD%DB%8C%D9%86-%D8%A7%D8%AC%D8%B1%D8%A7
omid_kma
جمعه 12 دی 1393, 18:05 عصر
encoding فایل مورد نظر رو بررسی بکن برادر. برای مثال با ++Notepad. من سالهاست اینطوری با کیوت کار میکنم. هیچ مشکلی نباید وجود داشته باشه
باگ ویژوال استودیو هستش http://support.microsoft.com/kb/2284668
بدون L"" نمی تونه تشخیص بده اون رشته utf8 هست.
chikar
جمعه 12 دی 1393, 19:06 عصر
هیچی حالا که کار می کنه لازم نیست unicode
من قبلا یک مشکل داشتم می خواستم یکسری جمله رو بر اساس یکسری کاراکتر تقسیم کنم .
کاراکتر ها رو به این شکل تعریف می کردم کار نمی کرد :
QString filters = QString(" \n,;!*&@#'$%^.\t*/+:\"()[]=?-{}<>_") +
QString::fromWCharArray(L"؛؟،ˈ»«");
نهایتا مجبور شدم این طوری بنویسم
QString filters = QString(" \n,;!*&@#'$%^.\t*/+:\"()[]=?-{}<>_") +
QString::fromWCharArray(L"\x60c\x61f\x61b\x2c8\x0bb\x0ab");
یعنی به جای هر کاراکتر کد یونیکد (http://unicode-table.com/en/) . حالا اگر برای شما حل شد و مشکلی نداره دیگه نیازی نیست این کار.
در مورد linguist هم این جا رو ببینید
http://doc.qt.io/qt-5/qtlinguist-index.html
یک مثال هم آقای مصافی قبلا گذاشته بودن :
http://barnamenevis.org/showthread.php?295154-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D8%B2%D8%A8%D8%A7%D9%86-%D9%85%D8%AD%DB%8C%D8%B7-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%AF%D8%B1-%D8%AD%DB%8C%D9%86-%D8%A7%D8%AC%D8%B1%D8%A7
ممنون در همه موارد توجیه کننده بود و عالی راهنمایی کردید و تشکر فراوان از شما
فقط سوال آخر: آیا می شه از این روش برای ورودی های مثل lineEdit هم استفاده کرد؟(البته در صورت دریافت کاراکترهای فارسی از lineEdit و ذخیره اون بدون این روش هم هیچ مشکلی نیست، و فقط این سوال جنبه راهنمایی و پرسشی از شما داره)باز هم ممنون
QString::fromWCharArray(L"متن فارسی")); //L is set
QString::fromWCharArray(my_lineEdit)); //L is Not set
omid_kma
شنبه 13 دی 1393, 21:44 عصر
ممنون در همه موارد توجیه کننده بود و عالی راهنمایی کردید و تشکر فراوان از شما
فقط سوال آخر: آیا می شه از این روش برای ورودی های مثل lineEdit هم استفاده کرد؟(البته در صورت دریافت کاراکترهای فارسی از lineEdit و ذخیره اون بدون این روش هم هیچ مشکلی نیست، و فقط این سوال جنبه راهنمایی و پرسشی از شما داره)باز هم ممنون
QString::fromWCharArray(L"متن فارسی")); //L is set
QString::fromWCharArray(my_lineEdit)); //L is Not set
برای lineEdit نیازی به L نیست از تابع .text() استفاده کنید
QString str=lineEdit.text();
مشکل تبدیل فقط برای وقتی هستش که رشته رو توی ادیتور ویژوال استودیو می نویسید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.