لماذا يبدو JSON مشوّهًا؟ حلول ترميز Unicode

2024-12-01

هل ترى نصوصًا مشوهة بعد لصق استجابة API؟ غالبًا JSON نفسه صحيح—RFC 8259 يطلب UTF-8 عند تبادل JSON بين الأنظمة، والمشكلة عادة في جهة فك الترميز.

JSON وUnicode

يمكن أن يحتوي النص على Unicode مباشرة أو بصيغة \uXXXX، والنتيجة بعد التحليل واحدة.

RFC 8259 يفرض UTF-8 عند تبادل JSON بين الأنظمة؛ واحفظ الملفات المحلية أيضًا بصيغة UTF-8.

{
  "greeting": "Hello",
  "escaped": "\u0048\u0065\u006c\u006c\u006f",
  "emoji": "🎉"
}

أعراض شائعة

ظهور ? أو � يعني غالبًا فك UTF-8 كأنه Latin-1/GBK. وقد يتلف التصدير إن استُخدم charset خاطئ.

تسلسلات \u

بعض serializers تنتج escapes آمنة ASCII، لكن البيانات تظل Unicode صحيحة. أصلح ترميز النقل بدل تعديل escapes يدويًا.

HTTP Content-Type

application/json لا يعرّف معامل charset في IANA؛ وبحسب RFC 8259 يجب أن تكون البايتات UTF-8.

عالج الترويسات الخاطئة في الخادم بدل حلول التفاف في العميل.

مشاكل BOM

RFC 8259 يمنع إرسال BOM في JSON عبر الشبكة. بعض المحللات تتجاهله لكن لا تعتمد على ذلك.

احفظ ملفات .json على UTF-8 بدون BOM وانتبه للمحارف المخفية عند النسخ من أدوات قديمة.

قائمة تحقق

تحقق من UTF-8 الفعلي للبايتات، ثم من إعداد المحرر، ثم من نتيجة التحليل عبر الإنترنت، وبعدها أصلح حلقة الاستهلاك.