سؤال

أقوم بنقل تطبيق ISAPI (PageProducers) من Delphi 7 إلى Delphi 2009 ، وتستند الصفحات إلى ملفات HTML في UTF8.

يسير كل شيء على ما يرام إلا عند إطلاق onhtmltag وأستبدل علامة شفافة مع أي قيمة بأحرف خاصة مثل الأحرف المعلنة (áé ...) يتم استبدال تلك الأحرف في الإخراج بحرف �.

ما هو الخطأ؟

هل كانت مفيدة؟

المحلول

كجزء من إجراء التصحيح الخاص بك ، يجب عليك أن تعرف بالضبط ما هي قيمة (قيمة البايت) التي يتلقاها المتصفح لطابع علامة الأسئلة.

كما يجب أن تعرف ، فإن نوع سلسلة Delphi 2009 هو Unicode ، في حين أن جميع الإصدار السابق كان ANSI. قدمت Delphi 7 Utf8String اكتب ، لكن Delphi 2009 جعل هذا النوع مميزًا. إذا كنت لا تستخدم هذا النوع لعقد سلاسل مشفرة على أنها UTF-8 ، فيجب عليك البدء في ذلك. القيم التي عقدت في Utf8String سيتم تحويل المتغيرات إلى UnicodeString القيم تلقائيًا عند تعيين واحد إلى الآخر.

إذا كنت تقوم بتخزين سلاسل UTF-8 المشفرة في العادية AnsiString المتغيرات ، سيتم تحويلها إلى Unicode باستخدام صفحة رمز النظام الافتراضية إذا قمت بتعيينها إلى UnicodeString. هذا ليس ما تريد.

إذا كنت تقوم بتعيين حرفيات UTF-8 المشفرة للمتغيرات من النوع string, ، اوقف هذا. يتوقع هذا النوع تشفير قيمه على أنها UTF-16 ، تمامًا مثل WideString دائما.

إذا كنت تقوم بتحميل ملفاتك إلى TStrings سليل مع LoadFromFile, ، ثم تحتاج إلى البدء في استخدام المعلمة الثانية لهذه الطريقة ، والتي تخبرها ما هو الترميز لاستخدامه. يجب استخدام الملفات المصفرة بـ UTF-8 TEncoding.UTF8. الافتراضي هو TEncoding.Unicode, ، وهو Little-Endian UTF-16.

نصائح أخرى

ربما تكون هذه مشكلة تشفير حرف.

يستخدم Delphi IDE عادة Windows-1252 أو UTF-16 لترميز التعليمات البرمجية المصدر. يستخدم HTML غالبًا UTF-8.

ربما تحتاج إلى بعض الترجمة بين تلك الترميزات. لذلك تحتاج إلى معرفة الترميزات المستخدمة بالضبط (مثل روب يذكر).

أو العودة إلى HTML التي تهرب من الشخصيات المعلنة (مثل رالف يذكر)

هل يمكنك نشر تطبيق صغير يوضح المشكلة؟ (يمكنك مراسلتي عبر البريد الإلكتروني ، حول أي شيء لديه Jeroen في اسم المستخدم و Pluimers.com في اسم المجال سيصل إلى صندوق البريد الخاص بي).

-جيرون

شكرًا لك على مساعدتك ، بعد اختبار بعضها ، كانت المشكلة بسيطة جدًا (أو غبية أيضًا)

response.contenttype := 'text/html charset=UTF-8'

لا حاجة للترجمة يدويًا بين Unicodestring Utf8string Ansistring WideString. استخدام سلسلة Delphi 2009 بالقرب من الكمال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top