السلام عليكم ....
قبل ايام و انا اتكلم مع دكتور في الجامعة قال لي انه تسطيع الكتابة باللغة العربية على برنامج الـ ++c و انا هنا لـ اسفسر عن طريقة تفعيل اللغة العربية في البرنامج
دمتم بود ^_^
السلام عليكم ....
قبل ايام و انا اتكلم مع دكتور في الجامعة قال لي انه تسطيع الكتابة باللغة العربية على برنامج الـ ++c و انا هنا لـ اسفسر عن طريقة تفعيل اللغة العربية في البرنامج
دمتم بود ^_^
تم تعديل هذه المشاركة بواسطة Sn@CkeR في 16 أبريل 2013 في 23:26
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
المشكلة ليست فى C++ انما فى عرض البيانات فى الكونسول
لذا ان اعدت توجيه المخرجات الى ملف مثلا ستجد المخرجات باللغة العربية وسليمة
// main.cc
#include <iostream>
int main(int , char** )
{
std::cout << "محمد فتحى" << std::endl;
return 0;
}
وعند تشغيل البرنامج الناتج من ترجمة الكود السابق وليكن main.exe
main.exe > output.txt
سيتم انشاء ملف بجوار برنامجك بالاسم output.txt وستجد داخله النص "محمد فتحى"
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
MOHAMED FATHEI كتب:المشكلة ليست فى C++ انما فى عرض البيانات فى الكونسول
لذا ان اعدت توجيه المخرجات الى ملف مثلا ستجد المخرجات باللغة العربية وسليمة
// main.cc #include <iostream> int main(int , char** ) { std::cout << "محمد فتحى" << std::endl; return 0; }
وعند تشغيل البرنامج الناتج من ترجمة الكود السابق وليكن main.exe
main.exe > output.txt
سيتم انشاء ملف بجوار برنامجك بالاسم output.txt وستجد داخله النص "محمد فتحى"
شكرا على هذه الطريقة الجميلة لكن لم تفهمني انا بدي على الشاشة السوداء تظهر الحروف العربية
كما قال الأخ محمد و أيضا كما ذكرتُ في مشاركتي بالأعلى (لا أدري هل قرأها صاحب الموضوع أم لا !) :
المشكلة ليست من اللغة بل من إعدادت الكونصول و بالتحديد : تغيير وضع الــ Cursor, شفرة الترميز بالإضافة إلى نوع الخط.
الخطوط (Consolas, Lucida) التي يوفرها الــ Windows console لا يمكنها تمثيل الأحرف العربية لذا يمكنك استخدام Console آخر يدعم الأحرف العربية مثل الكونصول الذي استخدمُته أنا بالأعلى أو يمكنك تجريب maximus5.
تحياتي.
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
الترميز الذى يستخدمه المترجم للحروف غير الإنجليزية تعتمد على المترجم حيث منهم من يستخدم UTF-8 و منهم من يستخدم Codepage. أنظر معي هذا المثال:
#include <fstream>
using std::ofstream;
template<typename t, int n>
inline int get_size( const t(&)[n] ) { return n; }
int main()
{
const char str[] = "كلمة.\n";
ofstream("./out.t") << get_size(str) << '\n' << str;
return 0;
}مع المترجم ++g النتيجة ستكون:
11كلمة.
المترجم استخدم ترميز UTF-8 بشكل إفتراضي. أنظر معي نتيجة نفس المثال بإستخدام الإعدادات الإفتراضية لـ 2008 ++VC:
7كلمة.
مترجم ++VC أستخدم الـ code-page الإفتراضية على جهازي و هي Windows-1256 و بالتالي الحروف العربية ستستخدم الأرقام من 128-255 و لهذا كل حرف يستهلك 1 بايت و بالتالي مساحة النص بالإضافة إلى Null char سيكون الإجمالي 7 بايت.
قم بحفظ ملف الكود من أى محرر أخر إلى UTF-8 او من داخل قائمة File اختر Advanced Save Options ثم اختر Unicode (UTF-8 Whitout signture) - Codepage 65001 ثم OK و أعد بناء البرنامج و أنظر النتيجة:
11كلمة.
المخرجات هذه المره كانت بإستخدام UTF-8 و حيث أن كل حرف من حروف اللغة العربية يستهلك 2 بايت لذا المساحة التى تحتاجها الكلمة "كلمة" هى 8 بايت و النقطه و السطر الجديد و Null char كل منهم يحتاج واحد بايت و بالتالي المساحة الإجمالية تكون 3 + 8 = 11 بايت
الخلاصة: مترجم g++ يستخدم UTF-8 لترميز Ordinary string literal و مترجم ++visual c يستخدم الـ codepage التى كتب بها ملف الكود الذى يحتوى على النص.
عملية إظهار النص على شاشة console/terminal بالغة العربية تعتمد على نظام التشغيل و لا علاقة لها بلغة ++c فى شئ.
و الله ولي التوفيق
تم تعديل هذه المشاركة بواسطة C++er في 20 أبريل 2013 في 02:33
مدونتي: C++ Tips and Tricks
Sn@CkeR كتب:كما قال الأخ محمد و أيضا كما ذكرتُ في مشاركتي بالأعلى (لا أدري هل قرأها صاحب الموضوع أم لا !) :
المشكلة ليست من اللغة بل من إعدادت الكونصول و بالتحديد : تغيير وضع الــ Cursor, شفرة الترميز بالإضافة إلى نوع الخط.
الخطوط (Consolas, Lucida) التي يوفرها الــ Windows console لا يمكنها تمثيل الأحرف العربية لذا يمكنك استخدام Console آخر يدعم الأحرف العربية مثل الكونصول الذي استخدمُته أنا بالأعلى أو يمكنك تجريب maximus5.
تحياتي.
C++er كتب:الترميز الذى يستخدمه المترجم للحروف غير الإنجليزية تعتمد على المترجم حيث منهم من يستخدم UTF-8 و منهم من يستخدم Codepage. أنظر معي هذا المثال:
#include <fstream> using std::ofstream; template<typename t, int n> inline int get_size( const t(&)[n] ) { return n; } int main() { const char str[] = "كلمة.\n"; ofstream("./out.t") << get_size(str) << '\n' << str; return 0; }مع المترجم ++g النتيجة ستكون:
11كلمة.المترجم استخدم ترميز UTF-8 بشكل إفتراضي. أنظر معي نتيجة نفس المثال بإستخدام الإعدادات الإفتراضية لـ 2008 ++VC:
7كلمة.مترجم ++VC أستخدم الـ code-page الإفتراضية على جهازي و هي Windows-1256 و بالتالي الحروف العربية ستستخدم الأرقام من 128-255 و لهذا كل حرف يستهلك 1 بايت و بالتالي مساحة النص بالإضافة إلى Null char سيكون الإجمالي 7 بايت.
قم بحفظ ملف الكود من أى محرر أخر إلى UTF-8 او من داخل قائمة File اختر Advanced Save Options ثم اختر Unicode (UTF-8 Whitout signture) - Codepage 65001 ثم OK و أعد بناء البرنامج و أنظر النتيجة:
11كلمة.المخرجات هذه المره كانت بإستخدام UTF-8 و حيث أن كل حرف من حروف اللغة العربية يستهلك 2 بايت لذا المساحة التى تحتاجها الكلمة "كلمة" هى 8 بايت و النقطه و السطر الجديد و Null char كل منهم يحتاج واحد بايت و بالتالي المساحة الإجمالية تكون 3 + 8 = 11 بايت
الخلاصة: مترجم g++ يستخدم UTF-8 لترميز Ordinary string literal و مترجم ++visual c يستخدم الـ codepage التى كتب بها ملف الكود الذى يحتوى على النص.
عملية إظهار النص على شاشة console/terminal بالغة العربية تعتمد على نظام التشغيل و لا علاقة لها بلغة ++c فى شئ.
و الله ولي التوفيق
الف شكر على هذه المساعدة
دمتم بود
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…