PDA

View Full Version : خواندن ونوشتن با يوني كد



negarsoft
سه شنبه 24 شهریور 1388, 04:52 صبح
سلام
مي خواستم بدونم چجوري با يوني كد بايد كاركنم (خواندن و نوشتن)راستي نمي شه خودمون چند كاراكتر بهش اظافه كنيم البته اگر مي شه يك مثال(كد) ساده بزنيد

pswin.pooya
سه شنبه 24 شهریور 1388, 10:19 صبح
یونی کد یک استاندارد هستش که کاراکترهاش رو سازمان یونی کد تصویب میکنه. بس شما نمی تونید به اون کد اضافه کنید.

برای کار با داده های کاراکتری یونی کد باید از نوع داده wchar_t استفاده کنید:

wchar_t s[] = L"سلام";قبل از رشته های یونی کد باید کلمه L رو قرار بدی مثال بالا.

توابع کار با رشته های یونی کد:

wcscpy
wcscat
و ...
اینا دقیقا همون توابع strcpy و ... هستند که به جای سه حرف اول str از wcs استفاده شده.

و اما برای اینکه با یونی کد کار کنی باید توی محیطی باشی که از یونی کد ساپورت میکنه. برای اینکه بدونی کامپایلر از اون ساپورت میکنه یا نه میتونی از _UNICODE استفاده بکنی:

#ifdef _UNICODE
...
#endif

نسخه یونی کد توابع ویندوز به W و نسخه آنسی اونها هم به A ختم میشن:


#ifdef _UNICODE
#define CreateWindow CreateWindowW
#else
#define CreateWindow CreateWindowA
#endifبرای تبدیل UTF-16 به آنسی در بر عکس میتونی از توابع mbstowcs و wcstombs استفاده کنی. اما برای بقیه قالبهای تبدیل مثل UTF-8 یا خودت باید کد بنویسی و یا اینکه از توابع سیستم عامل استفاده کنی.

negarsoft
جمعه 27 شهریور 1388, 03:44 صبح
سلام
من اگه بخوام كه كد يوني كد رو وارد كنم چي كار كنم ؟
استفاده از يوني كد هاي عريض تر مثلا" utf-32 چجوريه ؟اصلا" يوني كد از زبان هاي باستاني پيشتيباني مي كنه ؟
اگر utf-8 هشت بيت طول داره عملا" با اسكي چه تفاوتي مي كنه وچرا فارسي (عربي ) رو داره ولي اسكي نه ؟
ميشه ويژگي هاي كاربردي يوني كد رو بگيد ؟(يعني يك چيزي بگيد كه بدرد ملت بخوره جه فايده براي ملت كه مثلا" از چه استانداردهايي پيروي يا پشتيباني مي كنه )
فكر كنم كه براي توضيحات مهم باشه من تو لينوكس مي خوام برنامه بنويسم يك چيزايي توي صفحات man ديدم ولي نصف نيم كاره خواندم
ممنون

pswin.pooya
جمعه 27 شهریور 1388, 22:04 عصر
سلام
utf-8 : اگر کارکتذ کمتر از 127 باشه ( مقدار کدینگش - با توجه به اسکی) یک بایت در غیر این صورت دو بایت طول داره. در مورد utfهای به غیر از utf-16 little endian خودت باید مبدل رو بسازی.


منظورت از کد یونی کد رو وارد کنم چیه؟؟

negarsoft
شنبه 28 شهریور 1388, 02:48 صبح
سلام منظورم كد يوني كد يك چيزي مثل اينه :U+2212 حالا اگه من بخوام كه اون كاراكتري رو كه اين كد معرفي مي كنه ،رو روي صفحه چاپ كنم بايد چيكار كنم
راستي من اين قضيه ي مبدل رو نمي فهمم چرا بايد يوني كد رو به انسي تبديل كنيم
يك چيز ديگه من اين كد و كامپايل كردم ولي يك عدد توليد مي كنه بدون هيچ كاراكتري!!اصلا" با cout مي شه يوني كدرو نمايش داد!!

#include <iostream>
using namespace std;
int main()
{
wchar_t s[] = L"سلام";
cout << s;
}

pswin.pooya
شنبه 28 شهریور 1388, 12:52 عصر
کنسول سیستم عامل ویندوز از یونی کد پشتیبانی نمی کنه پس cout هم از اون پشتیبانب نمکنه.

برای استفاده از یک کد خاص:

wchat_t c = 2212

برای نمایش متن یونی کدت داخل موارد که از اسکی استفاده میکنن باید اون رو به اسکی (آنسی) تبدیل کنی.

negarsoft
یک شنبه 29 شهریور 1388, 06:38 صبح
سلام
ممنون تقريبا" مشكلم داره حل مي شه ولي دو تا سوال كوچيكه ديگه!
اول اينكه در Konsol (ترمينال KDE) هم عدد نشون ميده اين در حاليه كه konsol از utf-8 پشتيباني مي كنه يعني به راحتي فارسي مي نويسم و اينكه چه جوري تو فايل بنويسم منظورم يك چيز ساده مثل flie.put(ch) هست

Nima_NF
یک شنبه 29 شهریور 1388, 10:55 صبح
کنسول ویندوز یونیکد پشتیبانی می کند، اما متاسفانه کلا کنسول ها هیچ فونت غیر سیستمی برایش به طور پیش فرض وجود ندارد که مثلا بتواند فارسی نشان دهد یا بسیاری از زبان های دیگر را.

در کل در محیط کنسول دنبال اینکه یونیکد نمایش دهید نباشید که به خاطر محدودیت ها به جواب درستی نمی رسید، مگر اینکه قصد دارید اطلاعات یونیکد را به فایل ها بفرستید تا ذخیره کنید.

نکته : ضمنا برای یونیکد به جای cout باید از wcout استفاده کنید.

pswin.pooya
یک شنبه 29 شهریور 1388, 17:30 عصر
سلام
برای کار با فایلهای یونی کد ( فایلهای متنی یونی کد) اول باید lead byte ها رو بنویسی بعدش داده ها رو داخلش ذخیره کنی. Lead byte هر فایل مشخص میکنه که اون فایل با چه فرمتی ذخیره شده/ برای utf-16 باید این بایتها رو در اول فایل بنویسی:


const unsigned char UTF16_LITTLE_LEAD_0 = 255 ;
const unsigned char UTF16_LITTLE_LEAD_1 = 254 ;

negarsoft
سه شنبه 31 شهریور 1388, 03:47 صبح
سلام
مي شه در مورد lead byte ها بيشتر بگيد چون تا حالا اسمش رو نشنيده بودم