# Native Code > برنامه نویسی با C > برنامه نویسی در محیط QT و هم خانواده هایش >  مشکل با زبان فارسی در ویژوال استادیو

## chikar

سلام
داخل ویژوال استادیو 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();

----------


## حامد مصافی

QString unicodeString = QString::fromUtf8("نوشته فارسی من به صورت علامت سوال ذخیره می گردد");

----------


## chikar

> QString unicodeString = QString::fromUtf8("نوشته فارسی من به صورت علامت سوال ذخیره می گردد");


جواب نمی ده!

----------


## chikar

واقعا کسی تا به حال به این مشکل برنخورده و راه کاری برای حل نداره،
 حداقل کمی به این مشکل فکر کنید شاید بعداً برای شما هم پیش بیاد

----------


## کامبیز اسدزاده

سلام

دوست عزیز شما کد زیر رو در فایلی که مربوط به فرم یا سورس برنامه هستش قرار بدید نتیجه رو اعلام کنید.پ


#pragma execution_character_set("utf-8")

----------


## chikar

> سلام
> 
> دوست عزیز شما کد زیر رو در فایلی که مربوط به فرم یا سورس برنامه هستش قرار بدید نتیجه رو اعلام کنید.پ
> 
> 
> #pragma execution_character_set("utf-8")


سلام نه متاسفانه جواب نداد، در editor ویژوال استادیو 2010 متن فارسی نمایش داده می شه اما بعد از کامپایل ؟؟؟؟ نشون داده می شه!
warning: unknown pragma
*اما در ویژوال استادیو 2013 به نحو احسن و عالی جواب داد*
ممنون که جواب دادید

----------


## chikar

آیا امکانش هست که خطا از PDB فایل باشه؟!

----------


## omid_kma

من از این روش استفاده می کنم درست هم کار می کنه :

QString::fromWCharArray(L"می")

البته زمان هایی که فارسی و انگلیسی مخلوط نوشته میشه کار نمی کنه برای حل اون باید  کد unicode حروف فارسی رو بزارید .

روش استانداردتر می تونه این باشه که بجای فارسی انگلیسی بنوسید و در tr() قرار بدید و با استفاده از ابزار Qt Linguist برنامه رو ترجمه کنید .

----------


## حامد مصافی

encoding فایل مورد نظر رو بررسی بکن برادر. برای مثال با ++Notepad. من سالهاست اینطوری با کیوت کار میکنم. هیچ مشکلی نباید وجود داشته باشه

----------


## chikar

> من از این روش استفاده می کنم درست هم کار می کنه :
> 
> QString::fromWCharArray(L"می")
> 
> البته زمان هایی که فارسی و انگلیسی مخلوط نوشته میشه کار نمی کنه برای حل اون باید  کد unicode حروف فارسی رو بزارید .
> 
> روش استانداردتر می تونه این باشه که بجای فارسی انگلیسی بنوسید و در tr() قرار بدید و با استفاده از ابزار Qt Linguist برنامه رو ترجمه کنید .


ممنون جواب داد،عالی بود، حتی برای مخلوط انگلیسی و فارسی و اعداد! 
خیلی لطف کردی آقا امید

فقط  امکانش هست یه مثال بزنید برای تبدیل *"حروف فارسی"* به unicode و خوندن اون رو؟
در tr() یعنی چی انگلیسی بگذاریم، منظورتون معنی لغت فارسی اون به صورت انگلیسی است یا فینگلیش؟

----------


## chikar

> encoding فایل مورد نظر رو بررسی بکن برادر. برای مثال با ++Notepad. من سالهاست اینطوری با کیوت کار میکنم. هیچ مشکلی نباید وجود داشته باشه


encoding فایل بر روی utf-8 هست، حتی من خود فایل رو توی notepad بر روی utf-8 قرار دادم و دوباره ذخیره کردم، برخی از تنظیمات ویژوال استادیو هم که بر روی utf-8 و حتی unicode قرار گرفت، فایده ای نداشت، حتی کل پروژه رو دوباره با save as با فرمت utf-8 , یا unicode ولی جواب نداد
حالا این آقا امید یه راه کار برای حل داده که جواب داد
مرسی

----------


## omid_kma

> ممنون جواب داد،عالی بود، حتی برای مخلوط انگلیسی و فارسی و اعداد! 
> خیلی لطف کردی آقا امید
> 
> فقط  امکانش هست یه مثال بزنید تبدیل حروف فارسی به unicode و خوندن اون رو؟
> در tr() یعنی چی انگلیسی بگذاریم، منظورتون معنی لغت فارسی اون به صورت انگلیسی است یا فینگلیش؟


هیچی حالا که کار می کنه لازم نیست unicode 
من قبلا یک مشکل داشتم می خواستم یکسری جمله رو بر اساس یکسری کاراکتر تقسیم کنم .
کاراکتر ها رو به این شکل تعریف می کردم کار نمی کرد :

QString filters = QString(" \n,;!*&@#'$%^.\t*/+:\"()[]=?-{}<>_") +
                QString::fromWCharArray(L"؛؟،ˈ»«");

نهایتا مجبور شدم این طوری بنویسم 

QString filters = QString(" \n,;!*&@#'$%^.\t*/+:\"()[]=?-{}<>_") +
                QString::fromWCharArray(L"\x60c\x61f\x61b\x2c8\x0b  b\x0ab");

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

در مورد linguist هم این جا رو ببینید
http://doc.qt.io/qt-5/qtlinguist-index.html
یک مثال هم آقای مصافی قبلا  گذاشته بودن :
https://barnamenevis.org/showthread.p...AC%D8%B1%D8%A7

----------


## omid_kma

> encoding فایل مورد نظر رو بررسی بکن برادر. برای مثال با ++Notepad. من سالهاست اینطوری با کیوت کار میکنم. هیچ مشکلی نباید وجود داشته باشه


باگ ویژوال استودیو هستش http://support.microsoft.com/kb/2284668 
بدون L"" نمی تونه تشخیص بده اون رشته utf8 هست.

----------


## chikar

> هیچی حالا که کار می کنه لازم نیست unicode 
> من قبلا یک مشکل داشتم می خواستم یکسری جمله رو بر اساس یکسری کاراکتر تقسیم کنم .
> کاراکتر ها رو به این شکل تعریف می کردم کار نمی کرد :
> 
> QString filters = QString(" \n,;!*&@#'$%^.\t*/+:\"()[]=?-{}<>_") +
>                 QString::fromWCharArray(L"؛؟،ˈ»«");
> 
> نهایتا مجبور شدم این طوری بنویسم 
> 
> ...


*ممنون در همه موارد توجیه کننده بود و  عالی راهنمایی کردید و تشکر فراوان از شما*

فقط سوال آخر: آیا می شه از این روش برای ورودی های مثل lineEdit هم استفاده کرد؟(البته در صورت دریافت کاراکترهای فارسی از lineEdit و ذخیره اون بدون این روش هم هیچ مشکلی نیست، و فقط این سوال جنبه راهنمایی و پرسشی از شما داره)باز هم ممنون 

QString::fromWCharArray(L"متن فارسی")); //L is set
QString::fromWCharArray(my_lineEdit)); //L is Not set

----------


## omid_kma

> *ممنون در همه موارد توجیه کننده بود و  عالی راهنمایی کردید و تشکر فراوان از شما*
> 
> فقط سوال آخر: آیا می شه از این روش برای ورودی های مثل lineEdit هم استفاده کرد؟(البته در صورت دریافت کاراکترهای فارسی از lineEdit و ذخیره اون بدون این روش هم هیچ مشکلی نیست، و فقط این سوال جنبه راهنمایی و پرسشی از شما داره)باز هم ممنون 
> 
> QString::fromWCharArray(L"متن فارسی")); //L is set
> QString::fromWCharArray(my_lineEdit)); //L is Not set


برای lineEdit نیازی به L نیست از تابع .text() استفاده کنید

QString str=lineEdit.text();

مشکل تبدیل فقط برای وقتی هستش که رشته رو توی ادیتور ویژوال استودیو می نویسید

----------

