سطر جديد

السطر الجديد (يُسمى غالبًا نهاية السطر ، أو نهاية السطر ( EOL )، أو السطر التالي ( NEL )، أو فاصل الأسطر ) هو حرف تحكم أو سلسلة من أحرف التحكم في مواصفات ترميز الأحرف مثل ASCII و EBCDIC و Unicode ، إلخ. يُستخدم السطر الجديد للدلالة على نهاية سطر من النص وبداية سطر جديد. [ 1 ]
تاريخ
في منتصف القرن التاسع عشر، وقبل ظهور آلات الطباعة عن بعد، ابتكر مشغلو شفرة مورس أو التلغرافيون رموزًا خاصة بشفرة مورس لترميز تنسيق المسافات البيضاء في الرسائل النصية الرسمية. وعلى وجه الخصوص، يُستخدم رمز مورس BT (نص الفاصل التذكيري)، المُمثل بتسلسل حرفي "B" و"T" في شفرة مورس، والمُرسل بدون المسافات المعتادة بين الأحرف، لترميز سطر جديد أو قسم جديد في الرسالة النصية الرسمية.
لاحقًا، في عصر الطابعات الحديثة ، طُوِّرت رموز تحكم موحدة لمجموعات الأحرف للمساعدة في تنسيق النصوص باستخدام المسافات البيضاء. طُوِّرت ASCII بالتزامن من قِبَل المنظمة الدولية للتوحيد القياسي (ISO) وجمعية المعايير الأمريكية (ASA)، وهي المنظمة السابقة للمعهد الوطني الأمريكي للمعايير (ANSI). خلال الفترة من عام 1963 إلى عام 1968، دعمت مسودات معايير ISO استخدام إما إرجاع المؤشر إلى بداية السطر بالإضافة إلى تغذية السطر ( CR + LF ) أو تغذية السطر (LF ) فقط كسطر جديد، بينما دعمت مسودات ASA استخدام CR + LF فقط .
كان تسلسل CR + LF شائع الاستخدام في العديد من أنظمة الحاسوب المبكرة التي اعتمدت على آلات التلكس - عادةً طراز Teletype 33 ASR - كوحدة تحكم، لأن هذا التسلسل كان ضروريًا لوضع الطابعات في بداية سطر جديد. أخفى فصل السطر الجديد إلى وظيفتين حقيقة أن رأس الطباعة لم يكن قادرًا على العودة من أقصى اليمين إلى بداية السطر التالي في الوقت المناسب لطباعة الحرف التالي. أي حرف يُطبع بعد CR كان غالبًا ما يظهر كبقعة في منتصف الصفحة بينما كان رأس الطباعة لا يزال يُعيد العربة إلى موضعها الأول. كان الحل هو جعل السطر الجديد حرفين: CR لتحريك العربة إلى العمود الأول، و LF لتحريك الورقة لأعلى. [ 2 ] في الواقع، كان من الضروري غالبًا إرسال أحرف حشو إضافية - CR أو NUL زائدة - والتي يتم تجاهلها ولكنها تمنح رأس الطباعة وقتًا للتحرك إلى الهامش الأيسر. كما تطلبت العديد من شاشات العرض المرئي المبكرة عدة أحرف للتمرير .
في مثل هذه الأنظمة، كان على التطبيقات التواصل مباشرةً مع جهاز التلكس واتباع قواعده، إذ لم يكن مفهوم برامج تشغيل الأجهزة التي تخفي تفاصيل الأجهزة عن التطبيق متطورًا آنذاك. لذلك، كان يتم كتابة النصوص بشكل روتيني لتلبية احتياجات أجهزة التلكس. وقد استخدمت معظم أنظمة الحواسيب الصغيرة من شركة DEC هذه القاعدة. كما استخدمها نظام CP/M للطباعة على نفس المحطات الطرفية التي تستخدمها الحواسيب الصغيرة. ومن ثم، اعتمد نظام MS-DOS (1981) قاعدة CR + LF من نظام CP/M لتحقيق التوافق، وقد ورث نظام التشغيل Windows اللاحق من مايكروسوفت هذه القاعدة.
بدأ تطوير نظام التشغيل Multics عام 1964، وكان يستخدم حرف LF وحده كفاصل أسطر. استخدم Multics برنامج تشغيل الجهاز لترجمة هذا الحرف إلى أي تسلسل تحتاجه الطابعة (بما في ذلك أحرف الحشو الإضافية )، وكان استخدام بايت واحد أكثر ملاءمة للبرمجة. أما الخيار الأنسب ظاهريًا - CR - فلم يُستخدم، نظرًا لوظيفة CR المفيدة في طباعة سطر فوق آخر لإنشاء تأثيرات الخط الغامق والتسطير والشطب . ولعل الأهم من ذلك ، أن استخدام LF وحده كفاصل أسطر كان قد أُدرج بالفعل في مسودات معيار ISO/IEC 646 النهائي . اتبع نظام Unix نهج Multics، ثم تبعته أنظمة أخرى شبيهة بـ Unix . وقد أدى ذلك إلى تعارضات بين أنظمة Windows والأنظمة الشبيهة بـ Unix ، حيث لم يكن بالإمكان تنسيق الملفات المُنشأة على نظام تشغيل معين أو تفسيرها بشكل صحيح بواسطة نظام تشغيل آخر (على سبيل المثال، نص برمجي UNIX مكتوب في محرر نصوص Windows مثل Notepad [ 3 ] [ 4 ] ).
التمثيل
يرتبط مفهوما إرجاع المؤشر إلى بداية السطر (CR) وتغذية السطر (LF) ارتباطًا وثيقًا، ويمكن تناولهما بشكل منفصل أو معًا. في الوسائط المادية للآلات الكاتبة والطابعات ، يلزم محوران للحركة ، "للأسفل" و"للأفق"، لإنشاء سطر جديد على الصفحة . على الرغم من أن تصميم الآلة (الآلة الكاتبة أو الطابعة) يجب أن يأخذ هذين المحورين في الاعتبار بشكل منفصل، إلا أن المنطق المجرد للبرمجيات يمكنه دمجهما معًا كحدث واحد. لهذا السبب، يمكن تعريف سطر جديد في ترميز الأحرف على أنه إرجاع المؤشر إلى بداية السطر (CR) ودمجهما في سطر جديد (يُسمى عادةً إرجاع المؤشر إلى بداية السطر أو تغذية السطر ).CRLFCR+LFCRLF
تُوفّر بعض مجموعات الأحرف رمزًا منفصلاً لحرف السطر الجديد. على سبيل المثال، يُوفّر نظام EBCDIC رمزًا لحرف السطر الجديد (NL) بالإضافة إلى رمزي CR و LF . كما يُوفّر نظام Unicode ، إلى جانب رموز التحكم ASCII CR و LF ، رمز تحكم "السطر التالي" ( NEL )، بالإضافة إلى رموز تحكم لعلامات "فاصل الأسطر" و"فاصل الفقرات". ويحتوي Unicode أيضًا على أحرف قابلة للطباعة لتمثيل تغذية السطر ␊، وإرجاع المؤشر ␍، ورموز تحكم C0 الأخرى (بالإضافة إلى سطر جديد عام، ) في كتلة صور التحكم .
- تستخدم أنظمة EBCDIC ، وخاصةً أنظمة الحواسيب المركزية من IBM ، بما في ذلك z/OS ( OS/390 ) و IBM i ( OS/400 )، الحرف NL (سطر جديد، 0x15 ) [ 8 ] كرمز يجمع بين وظيفتي تغذية السطر وإرجاع المؤشر إلى بداية السطر. يُطلق على الحرف المكافئ في Unicode اسم NEL (السطر التالي). كما تحتوي EBCDIC على أحرف تحكم تُسمى CR و LF ، ولكن القيمة العددية لـ LF ( 0x25 ) تختلف عن تلك المستخدمة في ASCII ( 0x0A ). بالإضافة إلى ذلك، تستخدم بعض إصدارات EBCDIC الحرف NL ولكنها تُخصص له رمزًا عدديًا مختلفًا. مع ذلك، تستخدم أنظمة التشغيل هذه نظام ملفات قائم على السجلات ، حيث يتم تخزين الملفات النصية كسجل واحد لكل سطر. في معظم تنسيقات الملفات، لا يتم تخزين فواصل الأسطر فعليًا.
0x85 - عرّفت أنظمة التشغيل لسلسلة CDC 6000 السطر الجديد بأنه حرفان أو أكثر من الأحرف الستة بتات ذات القيمة الصفرية في نهاية كلمة من 60 بت. كما عرّفت بعض التكوينات الحرف ذي القيمة الصفرية بأنه حرف النقطتين ، مما أدى إلى إمكانية تفسير عدة نقاط على أنها سطر جديد حسب موقعها.
- يستخدم كل من RSX-11 و OpenVMS نظام ملفات قائم على السجلات، حيث تُخزَّن الملفات النصية كسجل واحد لكل سطر. في معظم تنسيقات الملفات، لا تُخزَّن فواصل الأسطر فعليًا، ولكن خدمة إدارة السجلات (RMS) تُضيف فاصلًا لكل سطر تلقائيًا عند استرجاعه بواسطة تطبيق. قد تحتوي السجلات نفسها على نفس أحرف فاصل الأسطر، وهو ما يُعتبر ميزة أو عيبًا حسب التطبيق. لا تكتفي RMS بتخزين السجلات فحسب، بل تُخزِّن أيضًا بيانات وصفية حول فواصل السجلات في بتات مختلفة للملف، مما يزيد الأمر تعقيدًا (نظرًا لأن الملفات قد تحتوي على سجلات ذات طول ثابت، أو سجلات مسبوقة بعدد معين، أو سجلات تنتهي بحرف محدد). هذه البتات ليست عامة، فبينما يمكنها تحديد أن CR LF أو LF أو حتى CR هو فاصل الأسطر، إلا أنها لا تستطيع استبدال أي رمز آخر.
- استخدمت بعض أنظمة التشغيل القديمة للحواسيب المركزية طول سطر ثابت . في مثل هذه الأنظمة، كان يُفترض وجود نهاية سطر ضمنية كل 72 أو 80 حرفًا، على سبيل المثال. لم يكن يتم تخزين أي حرف سطر جديد. عند استيراد ملف من مصدر خارجي، كان يجب إضافة مسافات إلى الأسطر الأقصر من طول السطر المحدد، بينما كان يجب اقتطاع الأسطر الأطول منه. يحاكي هذا استخدام البطاقات المثقبة ، حيث يُخزن كل سطر على بطاقة منفصلة، عادةً ما تحتوي كل بطاقة على 80 عمودًا، وغالبًا ما تحتوي على أرقام تسلسلية في الأعمدة من 73 إلى 80. أضافت العديد من هذه الأنظمة حرف تحكم في بداية السجل التالي ؛ يشير هذا الحرف إلى ما إذا كان السجل التالي امتدادًا للسطر الذي بدأه السجل السابق، أو سطرًا جديدًا، أو يجب أن يُطبع فوق السطر السابق (على غرار CR ). غالبًا ما كان هذا الحرف حرف طباعة عاديًا، وبالتالي لا يمكن استخدامه كأول حرف في السطر. قامت بعض طابعات الأسطر القديمة بتفسير هذه الأحرف مباشرةً في السجلات المرسلة إليها.
#
بروتوكولات الاتصال
تتضمن العديد من بروتوكولات الاتصالات نوعًا من اصطلاحات الأسطر الجديدة. وعلى وجه الخصوص، تستخدم البروتوكولات التي نشرتها فرقة عمل هندسة الإنترنت (IETF) عادةً تسلسل ASCII CRLF.
في بعض البروتوكولات القديمة، قد يتبع السطر الجديد رمز التحقق أو رمز التكافؤ.
يونيكود
يحدد معيار Unicode عددًا من الأحرف التي يجب أن تتعرف عليها التطبيقات المتوافقة كفواصل للأسطر: [ 9 ]
| LF : | تغذية الخط، U+000A |
| VT : | علامة تبويب عمودية ، U+000B |
| FF : | تغذية النموذج ، U+000C |
| CR : | إرجاع السطر ، U+000D |
| CR + LF : | CR ( U+000D ) متبوعًا بـ LF ( U+000A ) |
| نيل : | الخط التالي، U+0085 |
| LS : | فاصل الخطوط، U+2028 |
| ملاحظة : | فاصل الفقرات، U+2029 |
قد يبدو الأمر معقدًا للغاية مقارنةً بنهجٍ مثل تحويل جميع فواصل الأسطر إلى حرف واحد (مثل LF )، ولكن نظرًا لأن يونيكود مصمم للحفاظ على جميع المعلومات عند تحويل ملف نصي من أي ترميز موجود إلى يونيكود والعكس ( سلامة البيانات ذهابًا وإيابًا )، فإن يونيكود يحتاج إلى إجراء نفس التمييزات بين فواصل الأسطر التي تُجريها الترميزات الأخرى. على سبيل المثال، يحتوي ترميز EBCDIC على الأحرف NL و CR و LF ، لذا يجب أن تكون جميعها موجودة أيضًا في يونيكود.
تقع معظم أحرف وتسلسلات الأسطر الجديدة ضمن عناصر التحكم C0 في ترميز ASCII (أي أن رموز Unicode الخاصة بها تصل إلى 0x1F ). أما أحرف الأسطر الجديدة الثلاثة التي تقع خارج هذا النطاق - NEL و LS و PS - فغالبًا لا تتعرف عليها البرامج كأسطر جديدة. على سبيل المثال:
- يتعرف JSON على CR و LF كمسافات بيضاء، لكنه لا يتعرف على أي أحرف سطر جديد أخرى. [ 10 ] لا يمكن أن تظهر عناصر التحكم C0 بدون تهريب داخل السلاسل النصية، ولكن يمكن أن تظهر أي أحرف فاصل أسطر أخرى. [ 11 ]
- لا يتعرف معيار ECMAScript إلا على CR و LF و LS و PS كفواصل أسطر. [ 12 ] تاريخيًا، لم تكن فواصل الأسطر غير المُهرّبة مسموحة في السلاسل النصية، [ 13 ] ولكن تم تغيير ذلك في ES2019 للسماح باستخدام LS و PS غير المُهرّبة في السلاسل النصية [ 12 ] للتوافق مع JSON. [ 14 ]
- كان YAML 1.1 يتعرف على الثلاثة كفواصل أسطر؛ أما YAML 1.2 فلم يعد يتعرف عليها كفواصل أسطر من أجل التوافق مع JSON . [ 15 ]
- لا يتعامل برنامج المفكرة في نظام التشغيل ويندوز ، وهو محرر النصوص الافتراضي لنظام التشغيل مايكروسوفت ويندوز ، مع أي من NEL أو LS أو PS كفواصل أسطر.
- يتعامل برنامج gedit ، وهو محرر النصوص الافتراضي لبيئة سطح المكتب GNOME ، مع LS و PS كفواصل أسطر، ولكن ليس NEL .
يتضمن نظام يونيكود بعض الرموز الرسومية المصممة لعرض حرف مرئي للمستخدم لقارئ المستند، وبالتالي لا يتم التعرف عليها كسطر جديد:
- U+23CE ⏎ رمز العودة
- U+240A ␊ رمز تغذية الخط
- U+240D ␍ رمز إرجاع السطر
- U+2424  رمز السطر الجديد
HTML
في لغة HTML ، تُعتبر فواصل الأسطر مسافات بيضاء، وتُعامل عمومًا بنفس طريقة معاملة المسافات. [ 16 ] تُنشأ الفقرات باستخدام نسخ منفصلة من عنصر HTML ، ويتحكم محرك العرض في الفصل المادي بين الفقرات. [ 17 ]<p>
يمكن إنشاء فواصل الأسطر بشكل صريح باستخدام عنصر HTML . ولتسهيل قراءة صفحات الويب بواسطة برامج قراءة الشاشة، توصي وثائق HTML بعدم استخدام هذا العنصر لتقسيم الفقرات. وبدلاً من ذلك، تقترح مصادر مثل MDN Web Docs استخدام هذا العنصر للقصائد . [ 18 ]<br>
في لغات البرمجة
لتسهيل إنشاء برامج قابلة للنقل ، توفر لغات البرمجة بعض التجريدات للتعامل مع الأنواع المختلفة من تسلسلات الأسطر الجديدة المستخدمة في بيئات مختلفة.
توفر لغة C تسلسلات الهروب\n (سطر جديد) و \r(إرجاع المؤشر إلى بداية السطر). مع ذلك، ليس من الضروري أن تكون هذه التسلسلات مكافئة لأحرف التحكم ASCII LF و CR . يضمن معيار C سمتين فقط:
- كل من هذه التسلسلات الهروبية يرتبط برقم فريد محدد بواسطة التنفيذ ويمكن تخزينه في قيمة حرف واحد.
- عند الكتابة إلى ملف أو عقدة جهاز أو مقبس/مخزن مؤقت في وضع النص ،
\nتُترجم البيانات تلقائيًا إلى تسلسل الأسطر الجديد الأصلي الذي يستخدمه النظام، والذي قد يتجاوز حرفًا واحدًا. عند القراءة في وضع النص، يُترجم تسلسل الأسطر الجديد الأصلي مرة أخرى إلى تسلسل الأسطر الجديد\n. في الوضع الثنائي ، لا تُجرى أي ترجمة، ويُخرج التمثيل الداخلي الناتج عن عملية\nالكتابة مباشرةً.
في أنظمة تشغيل يونكس ، حيث نشأت لغة C، يكون تسلسل السطر الجديد الأصلي هو ASCII LF ( 0x0A )، لذا تم تعريفه ببساطة على هذه القيمة. وبما أن التمثيل الداخلي والخارجي متطابقان، فإن الترجمة التي تتم في وضع النص لا تُحدث أي تغيير ، ولا يوجد في يونكس مفهوم لوضع النص أو الوضع الثنائي. وقد دفع هذا العديد من المبرمجين الذين طوروا برامجهم على أنظمة يونكس إلى تجاهل هذا التمييز تمامًا، مما أدى إلى كتابة شفرة برمجية غير قابلة للنقل إلى منصات مختلفة.\n
يُفضّل تجنّب استخدام دالة fgets () من مكتبة C القياسية في الوضع الثنائي، لأنّ أي ملف لا يُكتب وفقًا لاتفاقية سطر جديد في أنظمة يونكس سيُقرأ بشكل خاطئ. كذلك، في الوضع النصي، أي ملف لا يُكتب وفقًا لتسلسل سطر جديد الأصلي للنظام (مثل ملف أُنشئ على نظام يونكس ثم نُسخ إلى نظام ويندوز) سيُقرأ بشكل خاطئ أيضًا.
من المشاكل الشائعة الأخرى استخدام \nبروتوكول إنترنت يفرض استخدام رمز ASCII CR + LF لإنهاء الأسطر. تعمل الكتابة إلى دفق نصي بشكل صحيح على أنظمة ويندوز، لكنها تُنتج رمز LF فقط على أنظمة يونكس، ورمزًا مختلفًا تمامًا على أنظمة أخرى. يُعد استخدام الوضع الثنائي أفضل قليلًا.\n\r\n
توفر العديد من اللغات، مثل C++ و Perl و [ 19 ] و Haskell، نفس تفسير \nC. يحتوي C++ على نموذج إدخال/إخراج (I/O) بديل حيث يمكن استخدام المعالج std::endl لإخراج سطر جديد (ويقوم بتفريغ مخزن البيانات).
توفر لغات البرمجة Java و PHP [ 20 ] و Python [ 21 ] التسلسل (لـ ASCII CR + LF ). وعلى عكس لغة C، تضمن هذه اللغات تمثيل القيمتين U+000D و U+000A على التوالي .\r\n
لا تُترجم دوال الإدخال/الإخراج في مكتبة فئات جافا هذه القيم تلقائيًا إلى تسلسلات أسطر جديدة خاصة بالمنصة عند الإدخال أو الإخراج. بدلاً من ذلك، توفر هذه الدوال وظائف لكتابة سطر كامل تُضيف تلقائيًا تسلسل الأسطر الجديدة الأصلي، ووظائف لقراءة الأسطر تقبل أيًا من CR أو LF أو CR + LF كفاصل أسطر (انظر BufferedReader.readLine() ). يمكن استخدام الدالة System.lineSeparator() لاسترداد فاصل الأسطر الأساسي. ويتم إدراج هذا الفاصل تلقائيًا عند استخدام مُحدد التنسيق في .%nSystem.out::printf
مثال:
String eol = System.lineSeparator ( ); String lineColor = "Color: Red " + eol ;تدعم لغة بايثون ميزة "دعم الأسطر الجديدة الشاملة" بشكل افتراضي، والتي تُترجم جميع اصطلاحات إنهاء الأسطر الثلاثة الشائعة ( \n, \r, \r\n) إلى اصطلاح بايثون القياسي \nعند فتح ملف للقراءة، وعند استيراد الوحدات، وعند تنفيذ ملف. ويمكن التحكم بهذه الميزة باستخدام الوسيطة newlineفي open()الدالة عند فتح الملف. [ 22 ] [ 23 ]
أنشأت بعض لغات البرمجة متغيرات وثوابت وإجراءات فرعية خاصة لتسهيل إدخال أسطر جديدة أثناء تنفيذ البرنامج. في بعض اللغات ، مثل PHP و Perl ، يُشترط استخدام علامات اقتباس مزدوجة لإجراء استبدال الهروب لجميع تسلسلات الهروب، بما في ذلك `--` \nو`-- \r`. في PHP، لتجنب مشاكل التوافق، يجب إصدار تسلسلات الأسطر الجديدة باستخدام الثابت PHP_EOL. [ 24 ]
مثال بلغة C# :
string eol = Environment.NewLine ; string lineColor = "Color: Red" + eol ; string eol2 = " \n" ; string lineColor2 = " Color: Blue" + eol2 ;مشاكل تتعلق بتنسيقات الأسطر الجديدة المختلفة

تتسبب اصطلاحات الأسطر الجديدة المختلفة في عرض ملفات النصوص التي تم نقلها بين أنظمة من أنواع مختلفة بشكل غير صحيح.
يظهر النص في الملفات التي تم إنشاؤها باستخدام البرامج الشائعة في أنظمة التشغيل الشبيهة بنظام Unix أو نظام التشغيل Mac OS الكلاسيكي على شكل سطر واحد طويل في معظم البرامج الشائعة في نظامي التشغيل MS-DOS و Microsoft Windows لأن هذه البرامج لا تعرض فاصل أسطر line feedواحد .carriage return
وعلى العكس من ذلك، عند عرض ملف مصدره جهاز كمبيوتر يعمل بنظام ويندوز على نظام يشبه نظام يونكس، قد يتم عرض CR الإضافي كفاصل سطر ثانٍ، أو كـ ^M ، أو كـ <cr> في نهاية كل سطر.
علاوة على ذلك، قد لا تقبل البرامج الأخرى غير محررات النصوص ملفًا ما، على سبيل المثال ملف تكوين ما، مشفر باستخدام اصطلاح السطر الجديد الخارجي، كملف صالح.
قد يصعب اكتشاف المشكلة لأن بعض البرامج تتعامل مع فواصل الأسطر الخارجية بشكل صحيح بينما لا تفعل ذلك برامج أخرى. على سبيل المثال، قد يفشل المترجم بسبب أخطاء نحوية غامضة حتى لو بدا ملف المصدر صحيحًا عند عرضه على وحدة التحكم أو في محرر النصوص . تتعرف محررات النصوص الحديثة عمومًا على جميع أنواع فواصل الأسطر CR + LF وتتيح للمستخدمين التحويل بين المعايير المختلفة. كما أن متصفحات الويب قادرة عادةً على عرض ملفات النصوص ومواقع الويب التي تستخدم أنواعًا مختلفة من فواصل الأسطر.
حتى لو كان البرنامج يدعم اصطلاحات أسطر جديدة مختلفة، فإن هذه الميزات غالبًا ما تكون غير مُصنَّفة أو موصوفة أو موثقة بشكل كافٍ. عادةً ما تُعرض قائمة أو مربع تحرير وسرد يُعدد اصطلاحات الأسطر الجديدة المختلفة للمستخدمين دون توضيح ما إذا كان الاختيار سيعيد تفسير الأسطر الجديدة، أو يُحوّلها مؤقتًا، أو يُحوّلها بشكل دائم. بعض البرامج تُجري التحويل ضمنيًا عند الفتح أو النسخ أو اللصق أو الحفظ، وغالبًا ما يكون ذلك بشكل غير متسق.
تُلزم معظم بروتوكولات الإنترنت النصية (بما في ذلك HTTP و SMTP و FTP و IRC وغيرها الكثير) باستخدام تسلسل ASCII CR + LF ( , 0x0D 0x0A ) على مستوى البروتوكول، ولكنها توصي التطبيقات المتسامحة بالتعرف على LF المنفرد ( , 0x0A ) أيضًا. على الرغم من هذا المعيار المُحدد، تستخدم العديد من التطبيقات خطأً تسلسل الهروب لسطر جديد ( LF ) بدلاً من التركيبة الصحيحة لتسلسل الهروب لسطر جديد وتسلسل الهروب لإرجاع المؤشر ( CR + LF ) (انظر قسم "سطر جديد في لغات البرمجة" أعلاه). يؤدي هذا الاستخدام غير المقصود لتسلسلات الهروب الخاطئة إلى مشاكل عند محاولة التواصل مع الأنظمة التي تلتزم بالتفسير الأكثر صرامة للمعايير بدلاً من التفسير المتسامح المُقترح. أحد هذه الأنظمة غير المتسامحة هو وكيل نقل البريد qmail الذي يرفض بنشاط قبول الرسائل من الأنظمة التي تُرسل LF منفردة بدلاً من CR + LF المطلوبة . [ 25 ]\r\n\n\n\r\n
ينص تنسيق رسائل الإنترنت القياسي [ 26 ] للبريد الإلكتروني على ما يلي: "يجب أن يظهر حرفا CR وLF معًا فقط كـ CRLF؛ ولا يجوز ظهورهما بشكل منفصل في نص الرسالة". وقد أدت الاختلافات بين تطبيقات SMTP في كيفية تعاملها مع حرفي LF و/أو CR المجردين إلى هجمات انتحال SMTP، والتي تُعرف باسم "تهريب SMTP". [ 27 ]
يستطيع بروتوكول نقل الملفات (FTP) تحويل أسطر جديدة تلقائيًا في الملفات المنقولة بين أنظمة ذات تمثيلات أسطر جديدة مختلفة عند النقل في "وضع ASCII". مع ذلك، غالبًا ما يؤدي نقل الملفات الثنائية في هذا الوضع إلى نتائج كارثية: إذ يُترجم أي تسلسل بايتات لسطر جديد - والذي لا يحمل دلالات فاصلة أسطر في هذا السياق، بل هو مجرد جزء من تسلسل بايتات عادي - إلى أي تمثيل سطر جديد يستخدمه النظام الآخر، مما يُتلف الملف فعليًا. غالبًا ما تستخدم برامج FTP بعض الطرق الاستدلالية (مثل فحص امتدادات أسماء الملفات ) لاختيار الوضع الثنائي أو ASCII تلقائيًا، ولكن في النهاية، يقع على عاتق المستخدمين التأكد من نقل ملفاتهم بالوضع الصحيح. في حال وجود أي شك بشأن الوضع الصحيح، يُنصح باستخدام الوضع الثنائي، حيث لن يتم تعديل أي ملفات بواسطة FTP، على الرغم من أنها قد تُعرض بشكل غير صحيح. [ 28 ]
التحويل بين تنسيقات الأسطر الجديدة
تُستخدم برامج تحرير النصوص غالبًا لتحويل ملف نصي بين تنسيقات أسطر جديدة مختلفة؛ ويمكن لمعظم برامج التحرير الحديثة قراءة وكتابة الملفات باستخدام اصطلاحات ASCII CR / LF المختلفة على الأقل .
على سبيل المثال، يمكن لمحرر النصوص Vim جعل الملف متوافقًا مع محرر النصوص Notepad في نظام التشغيل Windows.
: تعيين تنسيق الملف = dos wqقد لا تكون برامج التحرير مناسبة لتحويل الملفات الكبيرة أو التحويل الجماعي للعديد من الملفات. بالنسبة للملفات الكبيرة (على نظام التشغيل Windows NT)، يُستخدم الأمر التالي غالبًا:
D:\> TYPE unix_file | FIND /V "" > dos_file تتضمن البرامج المتخصصة لتحويل الملفات بين اصطلاحات الأسطر المختلفة: unix2dos و dos2unix و mac2unix و unix2mac و mac2dos و dos2mac و flip . [ 29 ] يتوفر الأمر tr في جميع أنظمة يونكس تقريبًا ، ويمكن استخدامه لإجراء عمليات استبدال عشوائية على الأحرف المفردة. يمكن تحويل ملف نصي من نظام DOS/Windows إلى تنسيق يونكس ببساطة عن طريق إزالة جميع أحرف ASCII CR .
$ tr -d '\r' < ملف الإدخال > ملف الإخراج
أو، إذا كان النص يحتوي فقط على أسطر جديدة من نوع CR ، عن طريق تحويل جميع أسطر CR الجديدة إلى LF باستخدام
$ tr '\r' '\n' < ملف الإدخال > ملف الإخراج
تُنفذ نفس المهام أحيانًا باستخدام awk أو sed أو في لغة Perl إذا كانت المنصة تحتوي على مترجم Perl:
$ awk '{sub("$","\r\n"); printf("%s",$0);}' inputfile > outputfile # UNIX to DOS (إضافة CRs على أنظمة Linux وBSD التي لا تحتوي على امتدادات GNU) $ awk '{gsub("\r",""); print;}' inputfile > outputfile # تحويل من DOS إلى UNIX (إزالة أحرف CR على أنظمة Linux وBSD التي لا تحتوي على امتدادات GNU) $ sed -e 's/$/\r/' inputfile > outputfile # تحويل من UNIX إلى DOS (إضافة أحرف CR على أنظمة Linux التي تستخدم امتدادات GNU) $ sed -e 's/\r$//' inputfile > outputfile # تحويل من DOS إلى UNIX (إزالة أحرف CR على أنظمة Linux التي تستخدم امتدادات GNU) $ perl -pe 's/\r?\n|\r/\r\n/g' inputfile > outputfile # التحويل إلى DOS $ perl -pe 's/\r?\n|\r/\n/g' inputfile > outputfile # التحويل إلى UNIX $ perl -pe 's/\r?\n|\r/\r/g' inputfile > outputfile # التحويل إلى Mac القديميمكن لأمر الملف تحديد نوع نهايات الأسطر:
$ file myfile.txt myfile.txt: نص إنجليزي ASCII، مع فواصل أسطر CRLFيمكن استخدام أمر egrep (grep الموسع) في نظام Unix لعرض أسماء ملفات Unix أو DOS (بافتراض أنها ملفات بنمط Unix وDOS فقط، وليس ملفات بنمط Mac OS الكلاسيكي):
$ egrep -L '\r\n' myfile.txt # عرض ملف بنمط UNIX (منتهي بـ LF) $ egrep -l '\r\n' myfile.txt # عرض ملف بنمط DOS (منتهي بـ CRLF)تتيح أدوات أخرى للمستخدم تصور أحرف نهاية السطر:
$ od -a myfile.txt $ cat -e myfile.txt $ cat -v myfile.txt $ hexdump -c myfile.txt تفسير
هناك طريقتان للنظر إلى الأسطر الجديدة، وكلاهما متسقتان ذاتيًا ، وهما: إما أن تفصل الأسطر الجديدة بين الأسطر، أو أنها تُنهي الأسطر. إذا اعتُبر السطر الجديد فاصلًا، فلن يكون هناك سطر جديد بعد السطر الأخير من الملف. تواجه بعض البرامج مشاكل في معالجة السطر الأخير من الملف إذا لم ينتهِ بسطر جديد. من ناحية أخرى، ستفسر البرامج التي تتوقع استخدام السطر الجديد كفاصل السطر الجديد الأخير على أنه بداية سطر جديد (فارغ). على العكس من ذلك، إذا اعتُبر السطر الجديد مُنهيًا، فمن المتوقع أن تنتهي جميع أسطر النص، بما في ذلك السطر الأخير، بسطر جديد. إذا لم يكن تسلسل الأحرف الأخير في ملف نصي سطرًا جديدًا، فقد يُعتبر السطر الأخير من الملف سطرًا نصيًا غير صحيح أو غير مكتمل، أو قد يُعتبر الملف مُقتطعًا بشكل غير صحيح. يتخذ معيار POSIX الموقف الأخير، حيث يعتبر الأسطر الجديدة مُنهيات للأسطر. [ 30 ]
في النصوص المُخصصة أساسًا للقراءة البشرية باستخدام برامج تدعم خاصية التفاف النص ، لا يلزم تخزين حرف سطر جديد إلا عند الحاجة إلى فاصل أسطر، بغض النظر عما إذا كانت الكلمة التالية ستناسب نفس السطر، كما هو الحال بين الفقرات وفي القوائم الرأسية. لذلك، في منطق معالجة النصوص ومعظم محررات النصوص ، يُستخدم حرف السطر الجديد كفاصل فقرات ويُعرف باسم "الرجوع القسري"، على عكس "الرجوع البرمجي" الذي يُنشأ ديناميكيًا لتطبيق التفاف النص ويتغير مع كل عرض. في العديد من التطبيقات، يوجد حرف تحكم منفصل يُسمى "فاصل الأسطر اليدوي" لفرض فواصل أسطر داخل الفقرة الواحدة. عادةً ما يكون رمز التحكم للرجوع القسري هو علامة الفقرة (¶)، بينما يكون رمز التحكم لفاصل الأسطر اليدوي عادةً سهم إرجاع السطر (↵).
التغذية العكسية والجزئية للخطوط
يُستخدم رمز RI ( U +008D REVERSE LINE FEED، [ 31 ] ISO/IEC 6429 8D، بالنظام العشري 141) لتحريك موضع الطباعة سطرًا واحدًا للخلف (عن طريق تغذية الورق عكسيًا، أو بتحريك مؤشر العرض سطرًا واحدًا للأعلى) بحيث يمكن طباعة أحرف أخرى فوق النص الموجود. يمكن القيام بذلك لجعلها أكثر وضوحًا، أو لإضافة خطوط تحتية، أو شطب، أو أحرف أخرى مثل علامات التشكيل . وقد أُطلق على تغذية السطر العكسية اسم " line starve" - وهو تورية على كلمة " line feed " - في قاموس المخترقين . [ 32 ]
وبالمثل، يمكن استخدام الرمزين PLD ( U +008B PARTIAL LINE FORWARD، بالنظام العشري 139) و PLU ( U +008C PARTIAL LINE BACKWARD، بالنظام العشري 140) لتقديم أو عكس موضع طباعة النص بمقدار جزء من المسافة الرأسية بين الأسطر (عادةً النصف). ويمكن استخدام هذين الرمزين معًا للرموز السفلية (بالتقديم ثم العكس) والرموز العلوية (بالعكس ثم التقديم)، وقد يكونان مفيدين أيضًا لطباعة علامات التشكيل.
انظر أيضاً
ملحوظات
- ↑ يتم احترامفواصل الأسطر الداخلية، على سبيل المثال
<PRE>...</PRE>
مراجع
- ↑ "ما هو السطر الجديد؟" . www.computerhope.com . تم الاطلاع عليه بتاريخ 10 مايو 2021 .
- ^ كوالين ، ستيف (2001). تم تحسين Vi - Vim (PDF) . سامز للنشر . ص. 120 . رقم ISBN 9780735710016أُرشف من النسخة الأصلية (PDF) بتاريخ 8 أبريل 2022. تم الاطلاع عليه بتاريخ 4 يناير 2023 .
- ↑ داكيت، كريس. "أخيرًا ، برنامج المفكرة في ويندوز يفهم أحرف نهاية السطر المستخدمة في جميع الأنظمة الأخرى" . ZDNet . مؤرشف من الأصل في 13 مايو 2018. تم الاطلاع عليه في 4 يناير 2023.
بعد عقود من الإحباط، واضطرار المستخدمين إلى تنزيل محرر نصوص حقيقي لتغيير سطر واحد في ملف إعدادات من نظام لينكس، قامت مايكروسوفت بتحديث برنامج المفكرة ليتمكن من التعامل مع أحرف نهاية السطر المستخدمة في بيئات يونكس ولينكس وماك أو إس.
- ↑ لوبيز، ميشيل (8 مايو 2018). "تقديم دعم نهايات الأسطر الموسعة في المفكرة" . سطر أوامر ويندوز . مؤرشف من الأصل في 6 أبريل 2019. تم الاسترجاع في 4 يناير 2023.
كما هو الحال مع أي تغيير في أداة راسخة، هناك احتمال ألا يعمل هذا السلوك الجديد في حالاتك، أو قد تفضل تعطيل هذا السلوك الجديد والعودة إلى سلوك المفكرة الأصلي. للقيام بذلك، يمكنك تغيير [...مفاتيح التسجيل...] لتعديل كيفية تعامل المفكرة مع لصق النص، وحرف نهاية السطر الذي يتم استخدامه عند الضغط على مفتاح الإدخال/الرجوع.
- ↑ كان-غرين، ويل غوارالدي. "مخطط ASCII" . bluesock.org .
- ↑ براي، أندرو سي؛ ديكنز، أدريان سي؛ هولمز، مارك أ. (1983). دليل المستخدم المتقدم لحاسوب بي بي سي الصغير (ملف PDF) . مركز كامبريدج للحاسوب الصغير. الصفحات 103، 104. ISBN 978-0946827008تم الاطلاع عليه بتاريخ 30 يناير 2019 .
- ↑ "إخراج الأحرف" . دليل مرجعي لمبرمجي نظام التشغيل RISC OS 3. شركة 3QD Developments المحدودة . 3 نوفمبر 2015. تم الاطلاع عليه بتاريخ 18 يوليو 2018 .
- ↑ بطاقة بيانات مرجعية لنظام IBM System/360، المنشور GX20-1703، قسم معالجة البيانات في IBM، وايت بلينز، نيويورك
- ↑ هينينجر، آندي (20 سبتمبر 2013). "UAX #14: خوارزمية تقسيم الأسطر في يونيكود" . اتحاد يونيكود.
- ↑ براي، تيم (مارس 2014). "قواعد JSON" . تنسيق تبادل بيانات تدوين كائنات جافا سكريبت (JSON) . IETF . القسم 2. doi : 10.17487/RFC7159 . RFC 7159 .
- ↑ براي، تيم (مارس 2014). "السلاسل النصية" . تنسيق تبادل البيانات JSON (تدوين كائنات جافا سكريبت) . IETF . القسم 7. doi : 10.17487/RFC7159 . RFC 7159 .
- 1 2 "مواصفات لغة ECMAScript 2019" . ECMA International. يونيو 2019. 11.3 فواصل الأسطر .
- ↑ "مواصفات لغة ECMAScript 2019" . ECMA International. يونيو 2018. 11.3 فواصل الأسطر .
- ↑ "دمج JSON (المعروف أيضًا باسم JSON ⊂ ECMAScript)" . GitHub . 22 مايو 2018.
- ↑ "5.4. أحرف فاصل الأسطر" . YAML Ain't Markup Language، الإصدار 1.2.2 . 1 أكتوبر 2021.
- ↑ "لغة ترميز النص التشعبي" . info.cern.ch. CERN . تم الاطلاع عليه بتاريخ 15 أغسطس 2025 .
- ↑ " <p> : عنصر الفقرة - HTML" . MDN . موزيلا. 13 أغسطس 2025.
- ↑ " <br> : عنصر فاصل الأسطر - HTML" . MDN . موزيلا. 9 يوليو 2025. تم الاطلاع عليه في 15 أغسطس 2025 .
- ↑ "binmode" . وثائق بيرل . مُوَزِّعو بيرل 5.
- ↑ "PHP: Strings - Manual" . دليل PHP . مجموعة PHP.
- ↑ "2. التحليل المعجمي" . مرجع لغة بايثون . مؤسسة بايثون.
- ↑ جانسن، جاك (14 يناير 2002). "PEP 278 - دعم الأسطر الجديدة الشامل" . مقترحات تحسين بايثون . مؤسسة برمجيات بايثون. المواصفات.
- ↑ "ما الجديد في بايثون 2.3" . بايثون 2.3 . مؤسسة برمجيات بايثون. القسم: عام، أسطر جديدة شاملة.
الأسطر الجديدة الشاملة - الملفات التي تُفتح للقراءة بالوضع الخاص "U" (بدلاً من "r") تُترجم جميع اصطلاحات إنهاء الأسطر الثلاثة الشائعة (n، r، rn) إلى اصطلاح n القياسي في بايثون. ساهم في هذا القسم جاك جانسن. (PEP 278)
- ↑ "PHP: الثوابت المُعرّفة مسبقًا - دليل المستخدم" . دليل PHP . مجموعة PHP.
- ↑ بيرنشتاين، دي جي "Bare LFs in SMTP" .
- ↑ ريسنيك، بيت (أبريل 2001). تنسيق رسائل الإنترنت . IETF . doi : 10.17487/RFC2822 . RFC 2822 .
- ↑ لونجين، تيمو (18 ديسمبر 2023). "تهريب البريد الإلكتروني عبر بروتوكول SMTP - انتحال عناوين البريد الإلكتروني عالميًا" . استشارات هيئة الأوراق المالية والبورصات الأمريكية .
- ↑ زيل، ستيفن (19 يناير 2015). "نقل الملفات" . جامعة أولد دومينيون. مؤرشف من الأصل في 14 مايو 2016.
عند الشك، انقل الملفات في الوضع الثنائي.
- ↑ ساب، كريغ ستيوارت. "تحويل نص ASCII بين أنظمة UNIX وMacintosh وMS-DOS" . مركز أبحاث الحاسوب في الموسيقى والصوتيات. مؤرشف من الأصل في 9 فبراير 2009.
- ↑ "3. التعريفات § 3.185 السطر" . المواصفات الأساسية لمجموعة Open Group، الإصدار 8، معيار IEEE 1003.1-2024 . معهد مهندسي الكهرباء والإلكترونيات (IEEE) ومجموعة Open Group.
3.185 السطر: سلسلة من صفر أو أكثر من الأحرف غير <سطر جديد> بالإضافة إلى حرف <سطر جديد> نهائي.
يتوفر شرحٌ مُفصّلٌ لآثار هذا التعريف للخط على الرابط التالي: https://stackoverflow.com/a/729795 - ↑ "ضوابط C1 وملحق Latin-1" (ملف PDF) . unicode.org . تم الاطلاع عليه بتاريخ 13 فبراير 2016 .
- ↑ سبيرز، ريتشارد أ.؛ ستيل، جاي ل. (1986). وودز، دونالد ر.؛ فينكل، رافائيل أ.؛ كريسبين، مارك ر.؛ ستالمان، ريتشارد م.؛ غودفيلو، جيفري س.؛ أبيل، إرنست ل. (محررون). "قاموسان متخصصان" . الخطاب الأمريكي . 61 (3): 273-277 . doi : 10.2307/454671 . ISSN 0003-1283 .
بعض المدخلات هي مصطلحات حاسوبية نموذجية. .... تم إدراج
"Line feed"
لشرح المدخل التوري "
line starve"
.
روابط خارجية
- مرجع يونيكود؛ انظر الفقرة 5.8 في الفصل 5 من معيار يونيكود 4.0 (ملف PDF)
- " حرف السطر الجديد [ NEL ] " .
- لغز نهاية السطر
- فهم الأسطر الجديدة في موقع Wayback Machine (تمت أرشفته في 20 أغسطس 2006)
- "قصة نهاية الخط"
- التحكم في الشخصيات
- مساحة بيضاء
- مقارنات لغات البرمجة
