PDA

View Full Version : سوال: تبدیل متن ناخوانا و انتخاب نوع Encoder مناسب



Amir4317
دوشنبه 19 خرداد 1393, 10:10 صبح
سلام به برنامه نویسان عزیز!

در برنامه ای پیرامون دانلود، به مشکلی با نام فایل دانلودی برخورد کردم؛ مثل فایل زیر فایل ورودی برای دانلود:


"ظ†ط¸ط±غŒظ‡ ط²ط¨ط§ظ† ظ‡ط§ ظˆ ظ…ط§ط´غŒظ† ظ‡ط§ ظ…ظ‡ظ†ط¯ط³ ع©ط¨غŒط±غŒ.pdf"


که در اصل باید بصورت پارسی : "نظریه زبان ها و ماشین ها مهندس کبیری.pdf"

نمایش داده بشه. برای رمزگشایی از همه متدهای system.web :> HttpUtility.UrlDecode استفاده کردم که جواب نداد.

دوستان خواهش میکنم اگر راهنمایی بلدید، دریغ نفرمایید!

shahryari
دوشنبه 19 خرداد 1393, 10:40 صبح
string s = "ظ†ط¸ط±غŒظ‡ ط²ط¨ط§ظ† ظ‡ط§ ظˆ ظ…ط§ط´غŒظ† ظ‡ط§ ظ…ظ‡ظ†ط¯ط³ ع©ط¨غŒط±غŒ.pdf";
byte[] b = System.Text.Encoding.Default.GetBytes(s);
s = System.Text.Encoding.UTF8.GetString(b);
MessageBox.Show(s);


120024

Amir4317
دوشنبه 19 خرداد 1393, 10:50 صبح
چطوری میتونم تشخیص بدم که این کار رو فقط برای متن های ناخوانا انجام بده؟

abolfazl.d
دوشنبه 19 خرداد 1393, 12:05 عصر
سلام
من با کدی که آقای شهریاری در پست 2 گفتن این برنامه رو نوشتم ولی وقتی متن رو تبدیل میکنه یک رشته فقط ؟ برمیگردونه.کجای کارم اشکال داره؟

لینک دانلود برنامه (http://www.uplooder.net/cgi-bin/dl.cgi?key=607cd188a5b9ce6a5fd4946a1059cb18)

ممنون

aliagamon
دوشنبه 19 خرداد 1393, 12:28 عصر
من فایل ضمیمه رو دانلود نکردم .... اما فکر کنم دلیلش اینه شما یه string که همین الان encode اش utf 8 هست (یا بهتره بگیم هرچی به جزء ASCII چون default سیستم ascii هست ) میاد اول باهاش مثل یه استرینگ Ascii رفتار میکنه بایت هارو که گرفت تازه میاد به UTF 8 کانورت میکنه .... راه حل ایه گه چک کنین اگه Encode استرینگ ASCII بود کانورت کنه وگرنه کاری نکنه ...چک کردنشو من بلد نیستم البته .... کلا خیلی با encode ها اشنایی ندارم ... :لبخند:

abolfazl_d_sh
دوشنبه 19 خرداد 1393, 15:32 عصر
string s = "ظ†ط¸ط±غŒظ‡ ط²ط¨ط§ظ† ظ‡ط§ ظˆ ظ…ط§ط´غŒظ† ظ‡ط§ ظ…ظ‡ظ†ط¯ط³ ع©ط¨غŒط±غŒ.pdf";
byte[] b = System.Text.Encoding.Default.GetBytes(s);
s = System.Text.Encoding.UTF8.GetString(b);
MessageBox.Show(s);

120024


من دقیقا همین کد رو نوشتم ولی جواب نمیده.لینک دانلود هم تو پست 5 هست.

aliagamon
دوشنبه 19 خرداد 1393, 15:50 عصر
من استفاده کردم و جواب میده .... شاید مشکل از تنظیمات زبان سیستم شماست نمیدونم ... (گفتم که زیاد در این مورد اطلاعات ندارم )

Amir4317
شنبه 31 خرداد 1393, 18:19 عصر
سلام دوستان
متن زیر رو چطور میتونم به شکل سطح نشون بدم؟


شکل اشتباه
صورت پرداخت قرارداد
که شکل درستش اینه: "صورت پرداخت قرارداد"

aliagamon
شنبه 31 خرداد 1393, 21:45 عصر
string s = "صورت پرداخت قرارداد";
byte[] b = System.Text.Encoding.GetEncoding(1252).GetBytes(s) ;
s = System.Text.Encoding.UTF8.GetString(b);
MessageBox.Show(s);

Amir4317
دوشنبه 02 تیر 1393, 19:54 عصر
جناب aliagamon (http://barnamenevis.org/member.php?214213-aliagamon) ، این کد 1252 رو از کجا آوردین؟ :افسرده:

Amir4317
دوشنبه 02 تیر 1393, 19:56 عصر
برای دو حالت بالا من این کلاس رو نوشتم




private static string NormalizeString(string hashalhaf)
{
if (string.IsNullOrWhiteSpace(hashalhaf)) return string.Empty;

var normalized = hashalhaf;
var charIndex = Convert.ToChar(hashalhaf.Substring(0, 1));

if (charIndex > 1560) //Like Ø
{
var stepOne = Encoding.Default.GetBytes(hashalhaf);
normalized = Encoding.UTF8.GetString(stepOne);
}
else if (charIndex > 160) //Like ظ
{
var stepOne = Encoding.GetEncoding(1252).GetBytes(hashalhaf);
normalized = Encoding.UTF8.GetString(stepOne);
}
normalized = ClearJavaString(normalized);
return normalized;
}


دوستان بگید درسته یا به روش بهتری هممیشه تشخیص داد؟

aliagamon
سه شنبه 03 تیر 1393, 03:05 صبح
جناب aliagamon (http://barnamenevis.org/member.php?214213-aliagamon) ، این کد 1252 رو از کجا آوردین؟ :افسرده:
1252 همون استاندار ANSI هست البته ممکنه با نام windows-1252 هم دیده باشینش ....:لبخند:
http://en.wikipedia.org/wiki/Windows-1252

Amir4317
جمعه 06 تیر 1393, 12:40 عصر
کسی نظری نداره؟:افسرده: