انجمن کاربران لینوکس ایران - تکنوتاکس سابق

نسخه ي کامل: خوندن و نوشتن رشته فارسي از/در فايل
شما در حال مشاهده نسخه ي متني اين صفحه هستيد. مشاهده نسخه کامل تر با قالب بندي صحيح
سلام دوستان.

من يه تابع نوشتم براي كار با كاراكترهاي فارسي. ورودي اون رو يك رشته wstring گرفتم. خروجيش هم از همون نوعه. براي تست اين تابع يك رشته از همون نوع گرفتم و مقداردهي اوليه كردم، همه چيز درست كار ميكرد. اما وقتي ميخوام اون رشته رو از يك فايل بخونم نميتونم. كسي ميتونه راهنمايي كنه؟ در حقيقت من دنبال اين هستم كه ببينم چه جوري ميشه يك رشته فارسي رو از يك فايل خوند و در يك متغير از نوع wstring ذخيره كرد.
اگه ممكنه بگيد در انتها براي كپي كردن اين رشته توي فايل چي كار بايد بكنم؟
اين رو هم بگم كه من توي C++‎ استاندارد كد ميزنم.

لطفا اگه امكان داشته باشه يه برنامه كامل برام بزارين كه محتويات يك فايل فارسي رو بگيره بريزه توي يك متغير wstring وبعد محتويات اون رشته رو بريزه توي يه فايل ديگه؟
در ضمن من براي خروج اطلاعات برنامم رو اينجوري نوشتم:

کد :
int main()
{
    wifstream inFile("in.txt",ios::in,ios::binary);
    wofstream outFile("out.txt",ios::out,ios::binary);

        wstring wstrIn=L"سلام";
    const wchar_t *c_str1 = wstrIn.c_str ( );
        outFile << c_str1 ;
        
getch();

return 0;
}
وقتي اين برنامه رو اجرا ميكنم توي فايل خروجي هيچي وجود نداره و سايزش رو 0 ميزنه. اما اگه به جاي رشته سلام بنويسم salam مشكل حل ميشه و برنامه درست كار ميكنه.
واسه خوندن هم مشكل دارم. وقتي محتويات متغير wstrIn رو چك ميكنم (بعد از اينكه محتويات فايل ريخته شد توي اون) يه مشت كاراكتر بي معني رو مشاهده ميكنم. حسابي گيج شدم. در ضمن من ميخوام فايل رو خط به خط بخونم. ولي ديگه نميدونم اين رو كجاي دلم بزارم...؟

فقط تو رو خدا زود جواب بديد. قضيه خيلي فوريه.
ممنون.
نمیدونم جواب بده یا نه ولی به امتحانش می ارزه.
هم سورس برنامه و هم فایل ورودی را با انکودینگ ISO 10646 ذخیره کن شاید حل بشه.

مهمان

چرا برنامت رو کامل نذاشتی پس؟
منظورم بخش اینکلود فایلهای هدر هست.
توابع و کلاس‌هایی که در ابتدای آنها w وجود دارد مثل wstring یا wfstream یا ... همگی با استاندارد utf-16 (یا utf-32) کار می‌کنند. در حالیکه در سیستم‌عامل گنو/لینوکس بطور گسترده از utf-8 استفاده می‌شود. استفاده از utf-8 مزایای بسیاری دارد از جمله سازگاری با برنامه‌ها و کدهای نوشته شده برای ASCII و ... برای کار با رشته‌ها و متن‌های utf-8 نیازی به کار خاصی نیست. بطور مثال توسط همان کلاس fstream یا string و ... می‌توانید با متن‌های فارسی هم کار کنید. تنها اگر بخواهید متن را تغییر دهید (یا طول واقعی متن را بگیرید) ممکن است به مشکل بر بخورید که در اینصورت می‌توانید از کتابخانه‌ی glib برای این منظور استفاده کنید. اگر هم علاقه‌ای به استفاده از utf-8 ندارید و می‌خواهید از همان utf-16 (یا utf-32) در گنو/لینوکس استفاده کنید، باید فایل بصورت utf-16 (یا utf-32) ذخیره شده باشد تا توسط دستور wifstream قابل خواندن باشد.