العربية

أدوات المطور · JSON المنسق والمدقق

الأحرف غير المرئية التي تفصل JSON: BOM، وعلامات الاقتباس الذكية وNBSP

· كيف يعمل

json سير عمل المطور تصديق

الأحرف غير المرئية التي تفصل JSON: BOM، وعلامات الاقتباس الذكية وNBSP الموضحة برموز JSON المميزة وحدود التحقق الدقيقة
الرسم التوضيحي المتجه الأصلي ToolAcre

عندما يبلغ المدقق عن خطأ في الحرف الأول ويبدو الملف مثاليًا، عادةً ما يقع اللوم على حرف غير مرئي. يشرح هذا المنشور علامات ترتيب البايت، وعلامات الاقتباس المطبعية، والمسافات غير المنفصلة، ​​وكيفية الإبلاغ عن كل واحدة منها.

السطر 1، العمود 1، لا يوجد شيء خاطئ في رؤيته

السطر 1، العمود 1، لا يوجد خطأ في رؤيته - يمكن أن يبدأ مستند JSON بحرف يشغل موضعًا حقيقيًا ولكن يتم عرضه بدون حرف رسومي مرئي. يبدو أن قوس الفتح هو الأول على الرغم من أن علامة ترتيب البايت أو الحرف ذي العرض الصفري تسبقه. يواجه المحلل اللغوي الصارم نقطة الرمز المخفية هذه قبل أن تصل إلى `{`، لذا فإن الإبلاغ عن العمود الأول يكون دقيقًا وليس غامضًا. العرض وتسلسل الشخصيات يروي ببساطة قصصًا مختلفة.

لا تحذف القوس الذي يبدو صحيحًا لمجرد ظهور علامة الإقحام بجانبه. افحص نقطة الرمز عند الإزاحة المُبلغ عنها، أو قم بتمكين المسافة البيضاء المرئية أو قم بالتبديل إلى طريقة عرض سداسية عشرية. لا يقوم ToolAcre بإزالة حرف بادئة BOM بصمت قبل التحليل، ويقوم الماسح الضوئي الخاص به بالإبلاغ عن أول حرف غير متوقع.

علامة ترتيب البايت UTF-8

علامة ترتيب البايت UTF-8 — يتم فك ترميز تسلسل البايت EF BB BF إلى U+FEFF في بداية الملف. ترتيب البايت ليس غامضًا في UTF-8، لذا فإن العلامة غير ضرورية، لكن بعض المحررين وأدوات التصدير ما زالوا يضيفونها كتوقيع ترميز. RFC 8259 يقول أن مولدات JSON يجب ألا تضيف BOM إلى JSON المتصلة بالشبكة، على الرغم من أن المحللين قد يختارون تجاهل واحد من أجل إمكانية التشغيل التفاعلي. لا يمكن افتراض هذا التسامح عبر الأدوات.

في السلسلة JavaScript، يكون BOM حرفًا واحدًا على الرغم من أن تمثيل UTF-8 الخاص به يستخدم ثلاث بايتات. ToolAcre يُبلغ عن المواضع في أحرف السلسلة، لذلك تظهر علامة بادئة في السطر 1، العمود 1. قم بتكوين المحرر لحفظ UTF-8 بدون BOM أو إزالة U+FEFF قبل توزيع الملف.

اقتباسات ذكية من معالجات النصوص

علامات الاقتباس الذكية من معالجات النصوص - تبدو علامات الفتح والإغلاق المطبعية مصقولة في النثر، ولكن JSON يتعرف فقط على علامة الاقتباس ASCII U+0022 كمحدد سلسلة. U+201C وU+201D هما أحرف Unicode عادية. خارج السلسلة، لا يمكنهم بدء اسم خاصية أو قيمة، لذلك يقوم المدقق بالإبلاغ عن الاقتباس الذكي نفسه. غالبًا ما يقدم التصحيح التلقائي في الدردشة أو البريد الإلكتروني أو محرر المستندات التغيير بعد أن كان JSON صالحًا في الأصل.

استبدل المحددات بعلامات اقتباس مزدوجة مستقيمة، ثم افحص الفواصل العليا وعلامات الاقتباس التي تنتمي إلى القيمة. تعتبر علامات الاقتباس المتعرجة قانونية تمامًا كمحتوى داخل سلسلة JSON محددة بشكل صحيح، مثل `"She said “go”"`؛ يفشلون فقط عندما يُطلب منهم أداء المهمة النحوية للمحدد.

مسافات غير منقسمة وأحرف ذات عرض صفري

مسافات غير منقسمة وأحرف ذات عرض صفري — JSON المسافة البيضاء هي قائمة قصيرة بشكل متعمد: المسافة العادية U+0020، علامة التبويب U+0009، تغذية السطر U+000A وإرجاع السطر U+000D. قد تبدو المسافة غير المنفصلة U+00A0 مطابقة للمسافة العادية بين النقطتين والقيمة، ولكنها غير موجودة في تلك القائمة. لا تُظهر المساحة ذات العرض الصفري U+200B شيئًا على الإطلاق، ومع ذلك تظل حرفًا غير متوقع خارج السلسلة المقتبسة.

تستخدم صفحات الويب مسافات غير منقسمة للاحتفاظ بالكلمات معًا، وقد تقوم أنظمة المراسلة بإدراج أحرف ذات عرض صفري للالتفاف أو معالجة البرنامج النصي. يمكن أن يؤدي نسخ المقتطفات المنسقة إلى إدخالها في التكوين. استبدل الأحرف البنيوية NBSP بمسافات عادية وقم بإزالة الأحرف ذات العرض الصفري غير المقصودة، مسترشدًا بالإزاحة المبلغ عنها.

مثال عملي: تكوين منسوخ من رسالة دردشة

مثال عملي: تكوين تم نسخه من رسالة محادثة - لنفترض أن النص المرئي يشبه `{"mode": "safe"}`، ولكن فشل التحقق من الصحة في البداية. يكشف العرض السداسي عن EF BB BF قبل الدعامة. تؤدي إزالة BOM إلى تقديم التقرير التالي إلى عرض الأسعار قبل `mode`، وهو في الواقع U+201C. يؤدي استبدال كلا المحددين الذكيين بـ U+0022 إلى كشف U+00A0 بين النقطتين والقيمة.

قم بتغيير تلك المساحة الهيكلية غير القابلة للكسر إلى U+0020 وقم بالتحقق من صحتها مرة أخرى. يمكن الآن تنسيق النتيجة المقبولة بشكل طبيعي. يوضح هذا التسلسل سبب عدم موثوقية إصلاح ما تظهره الشاشة فقط: يمكن للعديد من الأحرف غير المرئية أو المتشابهة أن تشغل مواضع نحوية مختلفة. اتبع كل سطر وعمود، وحدد نقطة الرمز الفعلية، وقم بإجراء استبدال واحد متعمد وأعد تشغيل التحقق من الصحة.

كيف ترى غير المرئي

كيفية رؤية ما هو غير مرئي — قم بتمكين خيار عرض المسافة البيضاء للمحرر لتمييز علامات التبويب عن المسافات وكشف الفجوات غير المعتادة، ثم استخدم مفتش Unicode أو العرض السداسي للأحرف التي لا تزال تبدو متطابقة. تظهر UTF-8 BOM كـ EF BB BF، ومسافة غير منقسمة كـ C2 A0 ومسافة ذات عرض صفر كـ E2 80 8B. تظهر علامات الاقتباس الذكية للفتح والإغلاق بالشكل E2 80 9C وE2 80 9D.

قم بمطابقة نظام إحداثيات التشخيص قبل العد. يقوم ToolAcre بمسح سلسلة JavaScript، بحيث تحسب أعمدتها UTF-16 وحدات التعليمات البرمجية بدلاً من UTF-8 بايت. وبالتالي، يمكن للمحرر السداسي الموجه للبايت أن يُظهر إزاحة رقمية أكبر بعد أحرف غير ASCII. استخدم السطر المُبلغ عنه لتضييق نطاق البحث وفحص نقاط الكود المجاورة وترجمتها حسب الحاجة فقط.

ما لا يغطيه هذا

ما لا يغطيه هذا — يمكن أن يكون mojibake مثل `café` صالحًا تمامًا JSON. يرى المحلل اللغوي تسلسلًا عاديًا لأحرف السلسلة وليس لديه أي دليل على أن UTF-8 بايت قد تم فك تشفيرها مسبقًا كتشفير آخر. وبالمثل، فإن المسافة غير المنفصلة أو الحرف ذي العرض الصفري داخل القيمة المقتبسة يكون صالحًا من الناحية النحوية. يلتقط التحقق من الصحة الأحرف التي تنتهك القواعد النحوية JSON؛ لا يمكنها تحديد ما إذا كان محتوى Unicode الصحيح يطابق نية المؤلف.

إصلاح تلف الترميز عند الحدود التي تتحول فيها وحدات البايت إلى نص، وذلك باستخدام معرفة الترميزات الأصلية والخاطئة. لا تقم بترميز وفك تشفير سلسلة JSON بشكل متكرر حتى تبدو أفضل، لأن ذلك قد يؤدي إلى إتلاف الأحرف الصحيحة بالفعل. يعد التطبيع على مستوى التطبيق أيضًا قرارًا منفصلاً: قد تتم مقارنة تسلسلات Unicode المتطابقة بصريًا بشكل مختلف مع بقائها صالحة.

الخلاصة: ثق بالعمود الذي تم الإبلاغ عنه حتى عندما يبدو الخط نظيفًا

الخلاصة: ثق في العمود الذي تم الإبلاغ عنه حتى عندما يبدو السطر نظيفًا - لا تزال الأحرف غير المرئية وعلامات الترقيم المتشابهة تشغل مواضع دقيقة في المصدر. يمكن أن تمنع العلامة BOM البادئة أو المحدد المتعرج أو المسافة غير المنفصلة أو العلامة ذات العرض الصفري المحلل اللغوي من الوصول إلى القوس أو الاقتباس الذي يبدو صحيحًا. اكشف عن المسافة البيضاء، وافحص نقاط التعليمات البرمجية أو البايتات واستبدل الحرف الذي تتعارض هويته مع دوره النحوي بدلاً من تحرير JSON المرئي المجاور بشكل عشوائي.

تذكر أن المواضع قد تحسب الأحرف بينما تقوم الأداة السداسية بحساب البايتات المشفرة، لذا قارن النص المحيط بدلاً من توقع تطابق كل رقم إزاحة. قم بإزالة BOM فقط عند حدود المستند، وقم بتحويل المحددات الذكية إلى U+0022 واستبدل التباعد الهيكلي غير الصالح دون مسح Unicode الشرعي داخل السلاسل.