انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید




نویسنده موضوع: چگونه میتوان کاراکتر های توسعه یافته را نمایش داد؟(حل شد)  (دفعات بازدید: 1791 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین bahman.azimii

  • Jr. Member
  • *
  • ارسال: 71
سلام

میخام یک برنامه بنویسم که یک جدول رو تو ترمینال نمایش بده که برای این کار نیاز دارم که بتونم کاراکترهایی که کد اسکیشون بین 127 تا 256 هست رو تو ترمینال چاپ کنم ولی بادستور cout این کاراکترها رو به شکل � نشون میده در ضمن برای این برنامه نیاز دارم که رنگ زمینه ورنگ متن رو هم برای یک کاراکتر خاص تغییر بدم . لطفا راهنمایی کنید که چطور میتونم این کارهارو انجام بدم .

پیشاپیش از پاسخگوییهاتون تشکر میکنم.
« آخرین ویرایش: 25 تیر 1393، 06:01 ب‌ظ توسط bahman.azimii »

آفلاین B

  • Sr. Member
  • *
  • ارسال: 354
  • جنسیت : پسر
سلام

اول اینکه کدهای اسکی توسعه داده شده بین 128 تا 255 هست؛ باید از 128 تا 255 پرینت گرفته بشه
برای درست نشون دادن کاراکتر ها هم باید انکدینگ (encoding) ترمینالتون رو عوض کنید تا بتونه کارکاتر ها رو نشون یده!
توی Konsole‌ وقتی انکودینگ رو روی windows-1285 میذارم به راحتی کارکتر ها رو نشون میده! درحالی که وقی روی utf-8 میذارم نمیتونه نشون بده؛
اگه از gnome-terminal استفاده میکنید هم باید انکودینگ رو عوض کنید تا بتونید کاراکتر ها رو ببینید

آفلاین bahman.azimii

  • Jr. Member
  • *
  • ارسال: 71
سلام

اول اینکه کدهای اسکی توسعه داده شده بین 128 تا 255 هست؛ باید از 128 تا 255 پرینت گرفته بشه
برای درست نشون دادن کاراکتر ها هم باید انکدینگ (encoding) ترمینالتون رو عوض کنید تا بتونه کارکاتر ها رو نشون یده!
توی Konsole‌ وقتی انکودینگ رو روی windows-1285 میذارم به راحتی کارکتر ها رو نشون میده! درحالی که وقی روی utf-8 میذارم نمیتونه نشون بده؛
اگه از gnome-terminal استفاده میکنید هم باید انکودینگ رو عوض کنید تا بتونید کاراکتر ها رو ببینید


خیلی دسستتون درد نکنه خیلی ممنون که پاسخ دادین من از دیروز براش دنبال راه حل کد نویسی میگشتم.
آیا میشه از طریق کد سی هم داخل برنامه خودش انکودینگ ترمینال رو عوض کنه؟ بازم متشکرم.

آفلاین bahman.azimii

  • Jr. Member
  • *
  • ارسال: 71
میبخشید یک سوال دیگه داشتم انکودینگ صفحه command prompt تو ویندوز چیه در ضمن من انکودینگ windows-1285 رو ندارم ولی یک انکودینگ بنام (Arabic (windows -1256 دارم که حروف فارسی رو با کاراکتر ؟ نشون میده.

آفلاین bahman.azimii

  • Jr. Member
  • *
  • ارسال: 71
خیلی ممنون اون انکدینگی رو که میگفتین داشتم
مشکل برنامه هم با انکدینگ (central european(ibm852
حل شد این انکدینگ کاراکترهای نمایش کادر برای رسم جدول رو داره. ولی هنوز نتونستم انکدینگ guak رو تغییر بدم.

آفلاین B

  • Sr. Member
  • *
  • ارسال: 354
  • جنسیت : پسر
شدنو میشه؛
مثلا این اینک:
http://askubuntu.com/questions/87227/switch-encoding-of-terminal-with-a-command
کودینک Konsole رو عوض میکنه... میشه توی c هم کارش برد

ولی راه حل منطقی‌ای نیست!

فکر کنم باید بشه از طریق گونان کاراکترهای توسعه داده شده رو هم نمایش داد؛

آفلاین B

  • Sr. Member
  • *
  • ارسال: 354
  • جنسیت : پسر
من یه راه حل برنامه‌نویسی پیدا کردن براش: منبع و منبع
#include <wchar.h>
#include <locale.h>
 
int main()
{
    setlocale(LC_ALL, "");
    wprintf(L"\u255F\n");
    return 0;
}


توسط این کد احتیاجی نیست دیگه انکودینگ ترمینال رو عوض کنید؛ ولی یه مشکلی هست!
دیگه نمیتونید از طریق کد اسکی؛ کاراکترها رو چاپ کنید؛ باید معادل کدها رو توی کدینگ utf8 بلد باشد!!
معادل این کد ها رو هم توی صفحه ویکی پدیا پیدا میکتید: یعنی از اینحا اونجا که نوشته   Standard code page

مثلا کاراکتری که کد اسکیش ۱۲۸ هست؛ رو نوشته 00C7 ؛ یه این معنی که باید توی قطعه کد بالایی که گذاشتم؛ 00C7 پرینت گرفته بشه! کد اسکی بعدی (۱۲۹) هست 00FC و ... همینطور تا آخر

وای اینکه چه ربطی بین 128 با 00C7 وجود داره رو نمیدونم!!

آفلاین bahman.azimii

  • Jr. Member
  • *
  • ارسال: 71
من یه راه حل برنامه‌نویسی پیدا کردن براش: منبع و منبع
#include <wchar.h>
#include <locale.h>
 
int main()
{
    setlocale(LC_ALL, "");
    wprintf(L"\u255F\n");
    return 0;
}


توسط این کد احتیاجی نیست دیگه انکودینگ ترمینال رو عوض کنید؛ ولی یه مشکلی هست!
دیگه نمیتونید از طریق کد اسکی؛ کاراکترها رو چاپ کنید؛ باید معادل کدها رو توی کدینگ utf8 بلد باشد!!
معادل این کد ها رو هم توی صفحه ویکی پدیا پیدا میکتید: یعنی از اینحا اونجا که نوشته   Standard code page

مثلا کاراکتری که کد اسکیش ۱۲۸ هست؛ رو نوشته 00C7 ؛ یه این معنی که باید توی قطعه کد بالایی که گذاشتم؛ 00C7 پرینت گرفته بشه! کد اسکی بعدی (۱۲۹) هست 00FC و ... همینطور تا آخر

وای اینکه چه ربطی بین 128 با 00C7 وجود داره رو نمیدونم!!

بازم منون از توضیحاتتون . آیا دستوری هست که عدد کد یونیکد رو که تو یک متغییر عددی ذخیره شده بگیره و کاراکترشو نمایش بده؟