عنوان:

‫استفاده از رمزگذاری‌های متنی قدیمی در دات‌نت‌کور: خلاصه جامع


نویسنده: وحید نصیری
تاریخ: ۱۴۰۳/۱۲/۱۵ ۰۹:۲۶
آدرس: www.dntips.ir
این سند به خطای System.NotSupportedException: No data is available for encoding 1252 که هنگام ارتقاء یک برنامه دات‌نت، به دات‌نت کور با آن مواجه می‌شویم، می‌پردازد. این خطا به این دلیل رخ می‌دهد که دات‌نت کور به طور پیش‌فرض از رمزگذاری‌های قدیمی مانند ویندوز-۱۲۵۲ (Windows-1252) پشتیبانی نمی‌کند.

مفاهیم کلیدی:
  • رمزگذاری متن (Text Encoding): روشی برای تبدیل داده‌های متنی به قالبی که توسط رایانه‌ها قابل پردازش باشد. رایانه‌ها ذاتاً اعداد را می‌فهمند، نه کاراکترها، بنابراین رمزگذاری متن، کاراکترها را به مقادیر عددی نگاشت می‌کند. این فرآیند تضمین می‌کند که داده‌های متنی می‌توانند به طور صحیح در سیستم‌ها و پلتفرم‌های مختلف ذخیره، منتقل و تفسیر شوند.
    • رمزگذاری‌های رایج:
    • اَسکی (ASCII): از کاراکترهای اصلی انگلیسی پشتیبانی می‌کند.
    • UTF-8: یک رمزگذاری همه‌کاره که از طیف گسترده‌ای از کاراکترها از زبان‌های مختلف پشتیبانی می‌کند.
    • ISO-8859-1: که به عنوان لاتین-۱ (Latin-1) نیز شناخته می‌شود، از زبان‌های اروپای غربی پشتیبانی می‌کند.
    • ویندوز-۱۲۵۲: یک ابرمجموعه از ISO-8859-1 است که معمولاً در محیط‌های ویندوز استفاده می‌شود.
مشکل:
  • دات‌نت کور فاقد پشتیبانی پیش‌فرض برای رمزگذاری ویندوز-۱۲۵۲ است.
راه حل:
    • نصب بسته System.Text.Encoding.CodePages: از دستور dotnet add package System.Text.Encoding.CodePages در کنسول مدیریت بسته (Package Manager Console) استفاده کنید.
    • این دستور را در پکیج منیجر کنسول ویژوال استودیو و یا سایر IDE ها اجرا کنید.
    • ثبت CodePagesEncodingProvider: کد Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); را به کد راه‌اندازی برنامه اضافه کنید.
    • در کد استارت آپ برنامه این خط کد اضافه شود.
    • در قسمت using این خط کد اضافه شود :
      • using System.Text;
    • نمونه کد:
      • Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    • استفاده از رمزگذاری:
    • مثال: Encoding windows1252Encoding = Encoding.GetEncoding(1252);
    • مثال نحوه استفاده از کد:
      • Encoding windows1252Encoding = Encoding.GetEncoding(1252);
      • byte[] encodedBytes = windows1252Encoding.GetBytes("String to encode");

با دنبال کردن این مراحل، می‌توانید اطمینان حاصل کنید که برنامه دات‌نت کور شما از رمزگذاری ویندوز-۱۲۵۲ پشتیبانی می‌کند و از خطای System.NotSupportedException جلوگیری می‌کند.


مشاهده مطلب اصلی