في النظام الذي كنت أعمل عليه مؤخرًا، واجهت مشكلة، نظام التداول يستخدم تشفير UTF-8، بينما تستخدم بعض الأنظمة الداعمة تشفير GB2312.
إذا كانت الصفحات والبرامج النصية ذات الترميزات المختلفة تشير إلى بعضها البعض، فستظهر أحرف مشوهة، ويكون الحل هو توحيدها في ترميز واحد.
في asp.net، إذا كنت تريد تعديل ترميز صفحة الإخراج، فيمكنك تعديل معلومات التكوين التالية في web.config
<globalization requestEncoding="utf-8" ResponseEncoding="utf-8" />
ما ورد أعلاه هو فقط لتعديل الترميز الافتراضي العام، إذا كان ترميز صفحة معينة فقط بحاجة إلى التعديل، فيمكنك ببساطة استخدام التعليمات البرمجية التالية في ASP.net:
ملاحظة: ما عليك سوى إضافته أسفل حدث Page_Load().
ترميز gb2312 = Encoding.GetEncoding("gb2312");
Response.ContentEncoding = gb2312;
في التطبيقات غير ASP.net، البيانات التي قد تقرأها هي بتشفير UTF-8، ولكن إذا كنت تريد تحويلها إلى ترميز GB2312، فيمكنك الرجوع إلى الكود التالي:
string utfinfo = "document.write("alert('كيف حالك؟؟');");";
string gb2312info = string.Empty;
ترميز utf8 = Encoding.UTF8;
Encoding gb2312 = Encoding.GetEncoding("gb2312");
// تحويل السلسلة إلى بايت[].
byte[] unicodeBytes = utf8.GetBytes(utfinfo);
// إجراء التحويل من ترميز إلى آخر.
byte[] asciiBytes = Encoding.Convert(utf8, gb2312, unicodeBytes);
// تحويل البايت الجديد [] إلى char [] ثم إلى سلسلة.
// هذه طريقة مختلفة قليلاً للتحويل للتوضيح
// استخدام GetCharCount/GetChars.
char[] asciiChars = new char[gb2312.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
gb2312.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
gb2312info = new string(asciiChars)؛
بالطبع، التحويل بين مختلف الترميزات الأخرى مشابه للكود أعلاه ولن يتم وصفه.