PDA

View Full Version : به دست آوردن یونیکد متن



cazino86
چهارشنبه 07 مهر 1389, 21:15 عصر
سلام...

چند باری این تاپیک رو راه انداختم اما هر بار پاک شد :لبخند:

نمیدونم تکراری بود یا ... :متفکر:

اما مطمئنم که تو این چند باری که سرچ کردم هیچ جوابی برای این سوالم تو این سایت پیدا نکردم :افسرده:

خوب برم سر اصل مطلب . من میخوام که یونیکد فایل رو اون هم زمانیکه فایل رو باز میکنم به دست بیارم . خوب برای این کار از تابع زیر استفاده میکنم .


public static Encoding GetFileEncoding(string srcFile)

{

// *** Use Default of Encoding.Default (Ansi CodePage)

Encoding enc = Encoding.Default;



// *** Detect byte order mark if any - otherwise assume default

byte[] buffer = new byte[5];

FileStream file = new FileStream(srcFile, FileMode.Open);

file.Read(buffer, 0, 5);

file.Close();



if (buffer[0] == 0xef && buffer[1] == 0xbb && buffer[2] == 0xbf)

enc = Encoding.UTF8;

else if (buffer[0] == 0xfe && buffer[1] == 0xff)

enc = Encoding.Unicode;

else if (buffer[0] == 0 && buffer[1] == 0 && buffer[2] == 0xfe && buffer[3] == 0xff)

enc = Encoding.UTF32;

else if (buffer[0] == 0x2b && buffer[1] == 0x2f && buffer[2] == 0x76)

enc = Encoding.UTF7;



return enc;

}


در این صفحه میتونید انواع یونیکد ها رو با مقادیری که در بافر قرار میدن ببینید :

http://en.wikipedia.org/wiki/Byte_order_mark

مشکلی که من دارم اینه که نمیدونم چطوری متدم رو طراحی کنم تا بتونه همه انواع یونیکد ها رو بشناسه !

روی utf ها و اینکه با bom ذخیره شدن یا نه مشکل دارم .

mehdi.mousavi
پنج شنبه 08 مهر 1389, 20:32 عصر
سلام.
اولا، این کدی که Rick Strahl (http://www.west-wind.com/Weblog/posts/197245.aspx) نوشته، ایراد داره. به Comment های پایین پستش دقت کنید...
ثانیا، برای تشخیص Encoding فایل در صورتیکه BOM وجود نداشته باشه، باید از روشهای Heuristics استفاده کنید که کار ساده ای نیست. البته خوشبختانه Carsten Zeumer قبلا در CodeProject مقاله ای در این باب (http://www.codeproject.com/KB/recipes/DetectEncoding.aspx) منتشر کرده که میتونه راه گشای شما باشه.

در نهایت خوندن این مقاله (http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html) نیز شاید تا حدی بهتون کمک کنه.

موفق باشید.

amir-haghighi
پنج شنبه 08 مهر 1389, 20:38 عصر
سلام ....

مشکلی که کد بالا داره این هست که اگه فایل خالی باشه و چیزی در اون نوشته نشده باشه هیچ یونیکدی رو نمیتونه بشناسه ! چون بافر خالیه !(البته این فقط یکی از مشکلاتشه!)