PDA

View Full Version : codepageمربوط به برنامه بیمه چیست؟



pariisa
دوشنبه 22 مهر 1387, 10:33 صبح
سلام
من می خوام یک سری اطلاعات (هم فارسی ، هم اعداد ) را درون فایلی با پسوند bdf.
که توسط یک برنامه تحت داس ساخته شده بریزم(faxpro)
این برنامه مربوط به شرکت بیمه است .برای اینکار تابعی پیدا کردم که هر رشته ای را با داشتن
codepageفعلی و codepage که قرار به آن تبدیل بشه میگیرد و تبدیل لازم را انجام می دهد .
من برنامه مبدل بین دیتابیس ها را هم از همین قسمت دانلود کردم ولی به دردم نخورده.
الان سوالی که دارم اینه که من برای قسمت مقصد چه عددی را قرار بدم که در فایل مورد نظرم که با همان برنامه تحت داس باز میشه حروف فارسی قابل خواندن باشه .من این کار را از طریق یک برنامه تحت ویندوز (#C) دارم انجام می دم. codepageهای 864و720و... رابرای محیط داس امتحان کردم ولی فایده نداشته.
تابع اینه :

public static string CPConvert(int nCurrentCodePage, int nNewCodePage, string cExpression)
{
int i=0;
int nLength = cExpression.Length;

//Create a current and new array of bytes with the length of the string
byte[] aCurr = new byte[nLength];
byte[] aNew = new byte[nLength];

//Fill the current array from the string
for (i=0; i< cExpression.Length; i++)
{
aCurr[i] = Convert.ToByte(cExpression[i]);
}

//Get the encoding objects for the current and new Code Pages
Encoding CurCP = Encoding.GetEncoding(nCurrentCodePage);
Encoding NewCP = Encoding.GetEncoding(nNewCodePage);

//Fill the new array after converting current code page to new code page
aNew = Encoding.Convert(CurCP, NewCP, aCurr);

//We still have bytes so we convert each byte to a char and add it to a string builder
StringBuilder sb = new StringBuilder();
for (i=0; i< cExpression.Length; i++)
{
sb.Append(Convert.ToChar(aNew[i]));
}

//Return a string back
return sb.ToString();

}

مشکل من اینجاست:


string MyString = "äää";


String s = CPConvert(1256, ????, MyString);

SMRAH1
دوشنبه 22 مهر 1387, 12:55 عصر
سلام

تا اونجایی که من می دونم،در فارسی ساز های DOS،چیزی به نام CodePage نیست!!!(نگفتم در Dos نیست بلکه در Dos فارسی شده نیست).به این معنی که در واقع نرم افزارهایی مثل سپند،درنا یا .. که در DOS اجرا می شدند،127 بایت بالا را (از 128 تا 255) با کاراکتر های فارسی پر می کردند.برای تبدیل یک متن فارسی در ویندوز به فارسی DOS راه زیادی نداری.اول باید حروف رو تک تک جدا کنی،بعد با توجه به جایگاه هر حرف مشخص کنی کد کدوم کاراکتر معادل DOs رو بگذاری.مثلا اگر بعد از حرف ب حرفی که از راست می چسبد مثل آ اومده باید یه کد از کاراکتر معادل DOS و اگر یک حرفی است که از راست نمی چسبد مثل فضای خالی باید یک حرف دیگه رو بگذاری.به این موضوع کاراکتر قبل از حرف رو هم اضافه کن (در مثال ما اگر قبل از ب کاراکتری بوده که از راست می چسبیده یه حرف و اگر نمی چسبیده یک حرف دیگه) در نتیجه برای کاراکتر ساده ای مثل ب 4 حالت (در بعضی 3 حالت) هست که برنامه باید تشخیص بده و کاراکتر مناسب رو تخصیص بده.

همونطور که می بینی این مطلب ربطی به #C نداره.
در ضمن من قبلا کدی در این رابطه برای تبدیل رشته های فارسی به رشته های دیگه (دوستم برای فارسی سازی Counter می خواست) نوشتم که داده ها رو (تنظیمات چسبندگی و ...) را از یک فایل اکسل می خونی البته در VC6،اگر بخواهی همون رو برات می فرستم (بهتره پیغام بدی چون این موضوع دیگه جاش توی تاپیک های #C نیست).و البته باید خودت هم روش کار کنی.

موفق باشی