ورود

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



rosenth
سه شنبه 16 مهر 1392, 22:32 عصر
سلام
از دوستان کسی هست که کد Qt مربوط به تبدیل فونت ایران سیستم (http://en.wikipedia.org/wiki/Iran_System_encoding_standard) به utf-8 رو داشته باشه؟
کاراکترهای فونت iran system از نظر طول 2 بایت هستند، ولی با کد زیر نتونستم آرایه بایت رو برای محاسبات بعدی بدست بیارم
char* bt=str->toLocal8bit()->data

rosenth
پنج شنبه 18 مهر 1392, 05:36 صبح
اگه کد زیر بدرستی برای توابع qt تبدیل بشه ممنون میشم
https://github.com/mohsen-d/IranSystemConvertor/blob/master/IranSystemConvertor/ConvertTo.cs

rahnema1
پنج شنبه 18 مهر 1392, 22:29 عصر
اگه کد زیر بدرستی برای توابع qt تبدیل بشه ممنون میشم
https://github.com/mohsen-d/IranSystemConvertor/blob/master/IranSystemConvertor/ConvertTo.cs

توجه کنید کاراکترهای ایران سیستم 8بیتی هستند و اونها رو توی آرایه هایی از نوع QByteArray ذخیره می کنیمک کار برنامه اینه که کاراکترهای با کدپیج ایران سیستم اول تبدیل به کدپیج 1256 بشه و بعد هم از 1256 به یونیکد تبدیل بشه
کار تبدیل از ایران سیستم به 1256 هم به این صورته که کاراکترهایی با کد کمتر از 128 بدون تغییر می مونند فقط می مونه کاراکترهای با کد بیشتر از 128 که توی اون جدول قرار دارند که با معادلشون جابجا می شوند و بعضی کاراکترهای خاص.
نوشتن این قسمت ساده است خوتون از پسش بر می آیید
نهایتا بعد از تبدیل شما یک QByteArray جدید خواهید داشت که مقادیر تبدیلی توی اون ریخته شده
کد زیر 3 مرحله داره
1.خواندن فایل ایران سیستم و ذخیره اون توی یک QByteArray
2. برنامه ای که خوتون خواهید نوشت عبارت است از تبدیل QByteArray از کدپیج ایران سیستم به 1256 یعنی کدپیج عربی. خروجی برنامه یک QByteArray خواهد بود که تبدیل شده QByteArray اولی هست
3. تبدیل کدپیج عربی 1256 به یونیکد که خروجی اون یک QString از نوع یونیکده



QString fileName ="c:\myfile.txt";
if (!fileName.isEmpty()) {
QFile file(fileName);
if (file.open(QFile::ReadOnly)) {
QByteArray stringBytes = file.readAll();
}
}
//do convertion from iransystem to 1256
//.....
//.....
QTextCodec *codec = QTextCodec::codecForName("Windows-1256");
QString string = codec->toUnicode(newStringBytes);