برای تبدیلات به multibyte به unicode و برعکس می توان از توابع wctomb / mbtowc / mbstowcs / wcstombs استفاده کرد. هر چند که این موارد جوابگوی کار شما نیست.
در ویندوز یونیکد به حالت UTF-16 هست، برای خواندن کارکترها از فایل به جای اینکه آن ها را به شکل char بخوانید و در آرایه ای از char بریزید، آن ها را باید به شکل wchar_t بخوانید که هر کارکتر را دو بایت در نظر می گیرد و می خواند. متاسفانه این کار با همان توابع استاندارد در سطح کنسول به راحتی نیست (حداقل بنده هم تا کنون با توابع استاندارد به جواب نرسیدم)
بعد این همه توضیح میخواستم این رو بدونم که آیا تو محیط Console تابعی هستش که ما کد unicode رو بهش بدیم و کاراکتر معادلش رو چاپ کنه یا این که وقتی کد Unicode یه کاراکتر رو داریم چه طور میشه کاراکتر درست رو تو یه فایل ذخیره کرد؟؟
کلا کار کردن با unicode توسط توابع استاندارد بسیار سخت و پر از ابهامات و ضعف هست، پشتیانی کلی از unicode جدید هست و حتی در نسخه های اولیه ویندوز پشتیبانی نمی شود، پس زیاد نباید انتظار داشته باشید. کنسول حتی فونت پیش فرض برای مطالب unicode را نیز ندارد. پس بهترین راه استفاده از API های همان سیستم عامل هست. (در همان محیط کنسول)
از طریق API ها در همان محیط کنسول:
#include <windows.h>
DWORD bytesWritten ;
HANDLE hFile ;
int len ; //Note: set this to the length of pStr
TCHAR pStr[] = L"unicode text";
WORD byteOrder = 0xFEFF ; // UTF-16
pstr
if (INVALID_HANDLE_VALUE ==
(hFile = CreateFile (L"C:\\name.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL)))
return FALSE ;
WriteFile (hFile, &byteOrder , 2, &bytesWritten, NULL) ;
WriteFile (hFile, pStr, len * sizeof (TCHAR), &bytesWritten, NULL) ;
در هر صورت اگر روش فوق مورد توجه شما نیست، کشف راه های جدید (و به قول دوستان، اختراع مجدد چرخه) توسط روش های استاندارد بر عهده شما، مثلا روش هایی مثل زیر:
basic_ofstream <wchar_t> wfile;
wfile.open( L"iotest.txt",ios_base::out | ios_base::app);
wfile.close();
در ضمن به دوستان بگم که از اونجایی که به ما از اول C و C++ رو تو محیط Console یاد دادن من فعلا با C++ تو محیط Console میتونم خوب کار کنم و با API ها و این چیزا فعلا آشنا نیستم و اصلا نمیتونم باهاشون کار کنم
شما در بسیار ی موارد ناچارید که از API های سیستم عامل برای ورودی-خروجی استفاده کنید؛ API هایی که نام برده شد در همان محیط کنسول به کار می روند، فقط کافیست هدر فایل را include کنید و از تابع استفاده کنید.
سوال دیگم اینه که من واسه ساختن متغییر های 3 یا 4 بایتی باید از چه متغییر هایی استفاده کنم که 3 یا 4 بایتی باشن
آرایه ای از char، دقت کنید که char لزوما کارکتر نیست، بلکه 1 بایت هست.