PDA

View Full Version : مشکل با یونیکد



amirsajjadi
سه شنبه 11 فروردین 1388, 11:05 صبح
با سلام
دوستان من با تابع ReadFile اطلاعاتی رو بصورت یونیکد از فایل میخونم حالا میخام کد اینتر رو توی این داده ها جستجو کنم (توی فایلی که اطلاعات رو میخونم کد اینتر وجود داره). ولی اطلاعاتی که تابع ReadFile برمیگردونه یک سری کاراکترهای عجیب و غریب هستن که اصلا کد اینتر توی اونا نیست.
حالا باید چکار کنم ؟

Nima_NF
سه شنبه 11 فروردین 1388, 14:12 عصر
در فایل های text از نوع یونیکد معمولا در ابتدای آن چند بایت برای byte-order mark/BOM وجود دارد که باید آن را نادیده بگیرید و پس از آن به جای char به وسیله TCHAR محتویات را بخوانید:
http://barnamenevis.org/forum/showthread.php?t=98587
http://www.barnamenevis.org/forum/showthread.php?p=685039

ضمنا ممکن است که نوشته یونیکد ازنوع باشد پس ابتدا آن را از طریق IsTextUnicode بررسی کنید و سپس اگر فلگ IS_TEXT_UNICODE_REVERSE_SIGNATURE را برگرداند باید خودتان هر دوبات که می خوانید بایت اول را با دوم جابجا (swap) کنید. قطعه کد زیر برگرفته از کتاب windows programming هست :



/*--------------------------------
(c) Charles Petzold, 1998
----------------------------------*/

if (IsTextUnicode (pBuffer, iFileLength, &iUniTest))
{
pText = pBuffer + 2 ;
iFileLength -= 2 ;

if (iUniTest & IS_TEXT_UNICODE_REVERSE_SIGNATURE)
{
for (i = 0 ; i < iFileLength / 2 ; i++)
{
bySwap = ((BYTE *) pText) [2 * i] ;
((BYTE *) pText) [2 * i] = ((BYTE *) pText) [2 * i + 1] ;
((BYTE *) pText) [2 * i + 1] = bySwap ;
}
}
//....
}