سؤال

لدي سلسلة نصية (سلسلة جافا) والتي يجب أن تحتوي على 'gerald.o'leary'.

في الواقع، يحتوي على حرف تحكم بالإضافة إلى الباقي، "c2".لقد قمت بتضمين التفريغ السداسي، يرجى الاطلاع image1.png لتفريغ عرافة.

enter image description here

عندما أقوم بحفظه في قاعدة البيانات وقراءته مرة أخرى عن طريق تشغيل SQL في العميل ونسخه ولصقه في محرر سداسي عشري، أرى أن c2 تم استبداله بـ 3f، يرجى الاطلاع على image2.png.

enter image description here

كان من الممكن أن أتعايش معها، ولكن في الحقيقة عندما تتم مقارنة هاتين السلسلتين في Java باستخدام String.equals()، يتم إرجاع false.

هل يمكن لأحد أن يشرح ما يحدث هنا؟!

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

المحلول

هل قمت بالتحقق مما إذا كان بإمكان قاعدة بيانات SQL الخاصة بك تخزين أحرف UTF-8/Unicode (على سبيل المثال:أليس ISO-8859-1 أو ASCII أو ما شابه)؟

  • قم أولاً بإخراج السلسلة إلى الإخراج القياسي لمعرفة ما إذا كانت تحتوي بالفعل على الحرف الصحيح (؟جيد في الإخراج ولكن؟؟أو 0xC2 0x92 = ´ ليس كذلك).
  • ثم تحقق من مجموعة أحرف قاعدة البيانات الخاصة بك.انظر دليلها.

نصائح أخرى

لا أعرف كيف حصلت على التفريغ السداسي، لكن سلاسل Java هي سلاسل Unicode، لذا لا يوجد توافق 1:1 بين الأحرف والبايتات.أظن أن سلسلتك تحتوي على أحرف Unicode التي لا يمكن تمثيلها بالبايت المفرد، وأن التعامل مع الأحرف (الذي يفترض أن هذا هو الحال) هو عربات التي تجرها الدواب.

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