PDA

View Full Version : مشکل نشان دادن کاراکتر های unicode در dev



applle
سه شنبه 29 دی 1394, 19:04 عصر
سلام.
من وقتی میخوام کاراکتر هایی مثل "
♕" یا "♞" یا "ツ" رو تو dev بنویسم وقتی paste میکنم هر 3 تا به شکل "؟" در میان و در کنسول هم به همین شکل نمایش داده میشن.
کسی راهی بلده؟
مثلا این ها کد خاصی دارن یا اصلا میتونم خودم تو dev گزینه utf-8 رو انتخاب کنم؟
از همین الان ممنون بابت جوابتون:قلب:

mhzarei76
سه شنبه 29 دی 1394, 19:33 عصر
با سلام میشه یکم واضح تر توضیح بدید منظورتون رو نمیفهمم

applle
سه شنبه 29 دی 1394, 23:38 عصر
با سلام میشه یکم واضح تر توضیح بدید منظورتون رو نمیفهمم
وقتی میخوام برای چیدن مهره های شطرنج از شکل اونا استفاده کنم مثلا از اسب استفاده کنم جای اسب باید
♞ رو بذارم یعنی:cout<<"♞"; //charaktere marboot be asb
اما توی dev اینطوری بهم نشون میده:
cout<<"?"; //alamat soal jaye asb mizare
و توی اجرا هم از همین علامت سوال استفاده میکنه.
حالا من میگم چطور باید این مشکل رفع شه؟

Poores
چهارشنبه 30 دی 1394, 06:55 صبح
راستش کار سختی هست اونقدری که من واقعا حوصله نکردم بخونم و یادبگیرم!
http://stackoverflow.com/questions/19548667/unicode-character-visual-c
پاسخ اول
----------------------
پیشنهاد میکنم از حروف استفاده کنید.
https://en.wikipedia.org/wiki/Algebraic_notation_%28chess%29

rahnema1
شنبه 03 بهمن 1394, 00:50 صبح
سلام در تاپیک زیر نحوه فعال کردن فونتهای یونیکد در کنسول را توضیح دادم که مثلا
بتونه حروف فارسی یا مثلا شطرنج را نشون بده
http://barnamenevis.org/showthread.php?429755
اما فونت courier new کاراکترهای شطرنج را نداره. یه فونت دیگه هست به نام Dejavu sans mono که می تونید نصب کنید البته لازمه اندازه فونت کنسول را بزرگ کنید تا کاراکترها به خوبی نمایش داده بشن
به جای dev هم می تونید از CodeBlocks استفاده کنید که به صورت utf8 می تونه ذخیره کنه همچنین باید به جای cout از wcout استفاده کنید و رشته ها را به صورت زیر بنویسید
L"mystring"
یعنی یک L قبل اون اضافه بشه به همین ترتیب لازمه به جای string از wstring استفاده بشه یا به جای char از wchar_t استفاده کنید

applle
یک شنبه 11 بهمن 1394, 14:19 عصر
سلام در تاپیک زیر نحوه فعال کردن فونتهای یونیکد در کنسول را توضیح دادم که مثلا
بتونه حروف فارسی یا مثلا شطرنج را نشون بده
http://barnamenevis.org/showthread.php?429755
اما فونت courier new کاراکترهای شطرنج را نداره. یه فونت دیگه هست به نام Dejavu sans mono که می تونید نصب کنید البته لازمه اندازه فونت کنسول را بزرگ کنید تا کاراکترها به خوبی نمایش داده بشن
به جای dev هم می تونید از CodeBlocks استفاده کنید که به صورت utf8 می تونه ذخیره کنه همچنین باید به جای cout از wcout استفاده کنید و رشته ها را به صورت زیر بنویسید
L"mystring"
یعنی یک L قبل اون اضافه بشه به همین ترتیب لازمه به جای string از wstring استفاده بشه یا به جای char از wchar_t استفاده کنید

ممنون از کمکتون.همون جور که گفتین پیش رفتم و از فونت
DejaVu Sans Mono استفاده کردم اما هنوز هم کاراکترهای شطرنج رو به صورت ? نشون میده :افسرده:.به نظرتون مشکل از فونت نیس؟یعنی مطمنین که این فونت کاراکتر های شطرنج رو ساپورت میکنه؟

rahnema1
یک شنبه 11 بهمن 1394, 20:46 عصر
راه مفید و مختصرش توی ویندوز این می شه:

#include <windows.h>

int main()
{
SetConsoleOutputCP ( CP_UTF8 );
HANDLE console = GetStdHandle ( STD_OUTPUT_HANDLE );
char shatranj[] = "♔♕♖♗♘♙♚♛♜♝♞♟";
DWORD written = 0;
WriteFile ( console, shatranj, sizeof(shatranj) - 1 , &written, NULL );
}


البته همون طور که در اون تاپیک اشاره کردم برای نصب فونت باید در رجیستری تغییر بدید
wcout فکر کنم برای کامپایلر های مختلف فرق می کنه
البته سورس برنامه را هم باید به صورت utf8 ذخیره کنید
من کاراکترهای شطرنج را تایپ کردم این سایت به صورت مربعی می کنه
عکس برنامه هم به صورت زیر
http://www.sharefile.ir/uploads/1454288688.png

applle
یک شنبه 11 بهمن 1394, 23:34 عصر
راه مفید و مختصرش توی ویندوز این می شه:

#include <windows.h>

int main()
{
SetConsoleOutputCP ( CP_UTF8 );
HANDLE console = GetStdHandle ( STD_OUTPUT_HANDLE );
char shatranj[] = "♔♕♖♗♘♙♚♛♜♝♞♟";
DWORD written = 0;
WriteFile ( console, shatranj, sizeof(shatranj) - 1 , &written, NULL );
}


البته همون طور که در اون تاپیک اشاره کردم برای نصب فونت باید در رجیستری تغییر بدید
wcout فکر کنم برای کامپایلر های مختلف فرق می کنه
البته سورس برنامه را هم باید به صورت utf8 ذخیره کنید
من کاراکترهای شطرنج را تایپ کردم این سایت به صورت مربعی می کنه
عکس برنامه هم به صورت زیر
http://www.sharefile.ir/uploads/1454288688.png
واقعا ممنون که به پستام پاسخ میدین.در ضمن اون پستتون در مورد رنگ کردن در کنسول هم خیلی مفید بود.:قلب:
ولی در این رابطه من فکر کنم برای شما در محیط برنامه نویسی حداقل خود مهره های شطرنج رو نشون میداد و احتمالا برای کنسول ؟ نشون میداد که با راهکار بالا اونو درست کردین.
اما برای من توی محیط dev هم ؟ نشون میده و به خاطر همین به هیچ عنوان در کنسول نمیتونه درست نشون بده.
گفتین که "
البته سورس برنامه را هم باید به صورت utf8 ذخیره کنید" اما من نمیدونم از کجا باید این تغییراتو بدم.لطفا بگین که چطور باید محیط dev رو utf8 کنم.
بازم تشکر:چشمک:

rahnema1
دوشنبه 12 بهمن 1394, 08:08 صبح
اگه اصرار دارید از dev استفاده کنید نسخه bloodshed dev نمی تونه به صورت utf8 ذخیره کنه حالا نسخه های مثل orwelldevcpp هم اومده که جدیدتره شاید بتونه ذخیره کنه اگه نشد مجبورید برنامه را در نوت پد یا ++notepad یا notepad2 بنویسید مثلا در notepad هنگام save به جای ANSI از UTF-8 استفاده کنید توی مثلا ++notepad هم میشه encoding را تغییر داد
بعد این برنامه را در dev باز کنید و کامپایل کنید اما اگه بخواهید تغیراتی بدهید لازمه در نوت پد انجام بشه
می تونید با IDE های دیگه مثل codeblocks کار کنید که به صورت utf8 می تونه ذخیره کنه
یا مثلا visual studio

rahnema1
دوشنبه 12 بهمن 1394, 22:53 عصر
یک نکته اینکه می شه به جای کاراکتر از کد معادل یونیکد اون استفاده کرد که در این صورت لازم نیست که سورس به صورت utf8 ذخیره بشه

#include <windows.h>

int main()
{
SetConsoleOutputCP ( CP_UTF8 );
HANDLE console = GetStdHandle ( STD_OUTPUT_HANDLE );
char shatranj[] = "\u2654\u2655\u2656\u2657\u2658\u2659" "\u265A\u265B\u265C\u265D\u265E\u265F";

DWORD written = 0;
WriteFile ( console, shatranj, sizeof(shatranj) - 1 , &written, NULL );
}

ضمنا printf هم جواب میده

#include <windows.h>
#include <stdio.h>

int main()
{
SetConsoleOutputCP ( CP_UTF8 );
char shatranj[] = "\u2654\u2655\u2656\u2657\u2658\u2659" "\u265A\u265B\u265C\u265D\u265E\u265F";
printf(shatranj);
}