چند وقت پیش یکی از دوستان میخواست با سی پلاس پلاس حروف فارسی رو درون یک فایل بنویسه

همونطور که اطلاع دارید حروف انگلیسی اسکی هستند و هرکدوم یه کاراکتر یک بایتی جا میگیرند ولی حروف فارسی و کلا یونیکد هرکدوم دوتا کاراکتر یک بایتی یا به عبارتی یک کاراکتر دو بایتی فضا میگیرند به همین خاطر باید از wstring بجای string استفاده بشه که توی همون هدر string هست و برای استفاده از کاراکتر ها هم باید از wchar_t استفاده کنید که نسخه توسعه یافته char عادی است و از دیتا تایپ‌های خود C++ است من در کد زیر یک مثال از نوشتن یک کلمه فارسی و نوشتن یک حرف از آن به صورت 3 بار تکرار آماده کردم و البته طول کلمه رو هم نشون دادم و یکبار هم همون کلمه رو درون استرینگ عادی ریختم تا طولش رو مقایسه کنید :

 

#include <fstream>
#include <iostream>
#include <locale>
#include <string>
using namespace std;
int main()
{
  std::locale::global(std::locale(""));
  wofstream myfile("file.txt");
  wstring wideString = L"فارسی";
  string usualString = "فارسی";
  myfile << wideString;
  wchar_t myChar = wideString[0];
  myfile << myChar << myChar << myChar;
  myfile.close();
  clog << "usual String length :" << usualString.length() << endl
     << "wide string length : " << wideString.length() << endl;
  return 0;
}