ورود

View Full Version : مبتدی: یونیکد فایل تکست



raminlich
جمعه 04 اردیبهشت 1394, 21:06 عصر
سلام
من یه برنامه دارم یه سری واژه ذخیره می کنه بعد یه سری از این واژگان فارسیه حالا میرم میبینم بعضی از کلمات عجیب غیر در اومده فهمیدم که دارم با انکدیند ANSI ذخیره میکنم
حالا من کل برنامه رو نوشتم حواسمم به این نبود چجوری باید یونیکد کنم؟
فایل های تکست تو برنامه ساخته میشه روشی هست فایل تکست رو مستقیم به صورت یونیکد ساخت؟ یا باید کار دیگه ای بکنم؟
ممنون

rahnema1
جمعه 04 اردیبهشت 1394, 23:44 عصر
سلام به این صورت میتونید بنویسید

#include <string>
#include <fstream>
using namespace std;
int main()
{
ofstream myfile("myfile.txt");
wstring str = L"سلام";
myfile.write((char *)(&str[0]) , str.size() * sizeof(wchar_t));
myfile.close();
}

یا این رقمی

#include <string>
#include <fstream>
using namespace std;
int main()
{
ofstream myfile("myfile.txt");
char16_t str[] = u"سلام";
myfile.write(reinterpret_cast<char *>(str) , char_traits<char16_t>().length(str) * sizeof(char16_t));
myfile.close();
}

raminlich
شنبه 05 اردیبهشت 1394, 01:33 صبح
سلام به این صورت میتونید بنویسید

#include <string>
#include <fstream>
using namespace std;
int main()
{
ofstream myfile("myfile.txt");
wstring str = L"سلام";
myfile.write((char *)(&str[0]) , str.size() * sizeof(wchar_t));
myfile.close();
}

یا این رقمی

#include <string>
#include <fstream>
using namespace std;
int main()
{
ofstream myfile("myfile.txt");
char16_t str[] = u"سلام";
myfile.write(reinterpret_cast<char *>(str) , char_traits<char16_t>().length(str) * sizeof(char16_t));
myfile.close();
}

ممنون از پاسخ شما ولی دو تا قطعه کدی که دادین اینجوری ذخیره میکنه سلام رو (3D'E) این شکلی نسیت عجیب تر از اینه :لبخند:

rahnema1
شنبه 05 اردیبهشت 1394, 07:03 صبح
ممنون از پاسخ شما ولی دو تا قطعه کدی که دادین اینجوری ذخیره میکنه سلام رو (3D'E) این شکلی نسیت عجیب تر از اینه :لبخند:

بستگی به برنامه ای داره که متن را باز می کنید
مثلا من در notepad یا notepad2 باز می کنم مشکلی نداره. بعضی ویرایشگرها برای اینکه بتونند تشخیص بدن متن مورد نظر یونیکد هست لازمه در ابتدای متن یک signature قرار بدیم:

#include <string>
#include <fstream>
using namespace std;
int main()
{
ofstream myfile("myfile1.txt");
char16_t signature = 0xFEFF;
char16_t str[] = u"سلام";
myfile.write(reinterpret_cast<char *>(&signature) , sizeof(char16_t));
myfile.write(reinterpret_cast<char *>(str) , char_traits<char16_t>().length(str) * sizeof(char16_t));
myfile.close();
}