ورود

View Full Version : خواندن رشته utf--8 یا unicode از فایل



aidin110
جمعه 20 بهمن 1391, 15:22 عصر
سلام دوستان
آقا ما هر کاری کردیم نتونستیم یه فایل متنی که توش کاراکترهای فارسی هستش رو لود کنیم و بریزیم تو TextEditor ...
همه ی کارای زیر رو هم انجام دادم.

تنظیم textEditor خوده Qt creator به utf-8 از منوی tool -> option ->TextEditor
استفاده QTextCodec برای تنظیم به utf-8
افزودن متن به TextEditor با تابع QString::fromUtf8
لودکردن متن تو QTextStream و تنظیم اون به utf-8
و همه ای تاپیکهای این انجمن رو هم خوندم

آقا نشد ک نشد....
یه کمک میکنید؟

کلا خواسته ی من اینه که یه فایل متنی فارسی (txt) رو با استفاده از QFile باز کنیم و تو QTextEditor برزیم.
در حالت عادی چرت وپرت لود میشه!!!
البته اینم بگم میتونم لیبلها و نامهارو تو خود برنامه فارسی تایپ کنم ، ولی نمیتونم متن فارسی لود کنم....
کــــــــــــــــــــــــ ـمک دیوانه شدم......

alamate_aoal
جمعه 20 بهمن 1391, 19:11 عصر
سلام

QFile file(":/readme.txt");
file.open(QIODevice::ReadOnly | QIODevice::Text);
ui->textEdit->setText( file.readAll() );

فایل readme.txt نباید بصورت ANSI ذخیره بشه(UTF-8 ذخیره کن)

aidin110
جمعه 20 بهمن 1391, 20:08 عصر
آقا واقعا ممنونم....
راستش تو برنامه ی که دارم میسازم میخوام با open کردن همه فایلهای متنی رو باز کنه txt فقط نه word و اینجورچیزا...
چی پیشنهاد میکنید؟
چطوری میشه تشخیص داد فایل ANSI هست یا UTF-8 و راه باز کردن ASNI چیه؟
تشکر فراوان....

alamate_aoal
شنبه 21 بهمن 1391, 18:13 عصر
پیدا کردن Encoding یک سند به این راحتی‌ها نیست بانضمام اینکه هیچ کتابخانه ای با دقت صد در صدی اینکار رو انجام نمیده.
کیوت خودش برای اینکار متکی بر کتابخانه ICU (http://icu-project.org) هست. اینجا (http://userguide.icu-project.org/conversion/detection) یک مثال از نحوه استفاده ICU موجوده.بعد از پیدا کردن Encoding , با QTextCodec و یا همان ICU می تونی اقدام به تبدیلات Encoding کنی.

نکته پایانی اینکه اگر کاربر ویندوز هستی با توجه باینکه ویندوز از انکدینگ مرتبط با تنظیمات Region کاربر برای ذخیره سازی اسناد استفاده میکنه خیلی راحت می توانید با کدی شبیه کد زیر محتویات سند خوانده شده را به یونیکد تبدیل کنید. در مثال زیر فایل readme.txt بصورت ANSI ذخیره شده و حاوی کاراکترهای فارسیست:

QFile f(":/readme.txt");
if (f.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextCodec *codec = QTextCodec::codecForName(
QTextCodec::codecForLocale()->name() );
ui->textEdit->setText( codec->toUnicode(f.readAll()) );
}
else
{
qDebug() << f.errorString();
}