سطر جديد

تمت إضافة سطر جديد بين الكلمتين "Hello" و"world"

السطر الجديد (يُطلق عليه غالبًا نهاية السطر أو نهاية السطر ( EOL ) أو السطر التالي ( NEL ) أو فاصل السطر ) هو حرف تحكم أو سلسلة من أحرف التحكم في مواصفات ترميز الأحرف مثل ASCII و EBCDIC و Unicode وما إلى ذلك. يتم استخدام هذا الحرف أو سلسلة الأحرف للإشارة إلى نهاية سطر من النص وبداية سطر جديد. [1]

تاريخ

في منتصف القرن التاسع عشر، قبل وقت طويل من ظهور آلات الطباعة عن بعد، اخترع مشغلو أو خبراء التلغراف رموز مورس واستخدموا رموز مورس الاحترافية لتشفير تنسيق النص ذي المسافات البيضاء في الرسائل النصية المكتوبة الرسمية. وبشكل خاص، تُستخدم رموز مورس الاحترافية BT (اختصار لـ Break t ext) التي تمثلها سلسلة من رموز مورس النصية الحرفية "B" و"T" المرسلة بدون المسافات العادية بين الأحرف في رموز مورس لتشفير والإشارة إلى سطر جديد أو قسم جديد في رسالة نصية رسمية.

لاحقًا، في عصر الطابعات التلغرافية الحديثة ، تم تطوير أكواد تحكم موحدة لمجموعات الأحرف للمساعدة في تنسيق النص ذي المسافات البيضاء. تم تطوير ASCII في وقت واحد من قبل المنظمة الدولية للمعايير (ISO) والجمعية الأمريكية للمعايير (ASA)، وكانت الأخيرة المنظمة السلف للمعهد الوطني الأمريكي للمعايير (ANSI). خلال الفترة من 1963 إلى 1968، دعمت مسودة معايير ISO استخدام إما .mw-parser-output .monospaced{font-family:monospace,monospace}CR+LF أو LF وحده كسطر جديد، بينما دعمت مسودات ASA CR + LF فقط .

كان التسلسل CR + LF مستخدمًا بشكل شائع في العديد من أنظمة الكمبيوتر المبكرة التي اعتمدت آلات Teletype - عادةً طراز Teletype Model 33 ASR - كجهاز وحدة تحكم، لأن هذا التسلسل كان مطلوبًا لوضع هذه الطابعات في بداية سطر جديد. كان فصل السطر الجديد إلى وظيفتين يخفي حقيقة مفادها أن رأس الطباعة لا يمكنه العودة من أقصى اليمين إلى بداية السطر التالي في الوقت المناسب لطباعة الحرف التالي. غالبًا ما تتم طباعة أي حرف مطبوع بعد CR كلطخة في منتصف الصفحة بينما كان رأس الطباعة لا يزال يحرك العربة إلى الموضع الأول. "كان الحل هو جعل السطر الجديد حرفين: CR لتحريك العربة إلى العمود الأول، و LF لتحريك الورقة لأعلى." [2] في الواقع، كان من الضروري غالبًا إرسال أحرف حشو إضافية - CRs أو NULs غريبة - والتي يتم تجاهلها ولكنها تمنح رأس الطباعة وقتًا للانتقال إلى الهامش الأيسر. كما تطلبت العديد من شاشات الفيديو المبكرة أوقاتًا متعددة للأحرف للتمرير عبر الشاشة.

في مثل هذه الأنظمة، كان لزامًا على التطبيقات أن تتحدث مباشرة إلى آلة الطباعة عن بعد وأن تتبع قواعدها، حيث لم يكن مفهوم برامج تشغيل الأجهزة التي تخفي مثل هذه التفاصيل المادية عن التطبيق متطورًا بعد. لذلك، كان يتم تأليف النص بشكل روتيني لتلبية احتياجات آلات الطباعة عن بعد. استخدمت معظم أنظمة الكمبيوتر الصغيرة من شركة DEC هذه القاعدة. كما استخدمتها CP/M أيضًا للطباعة على نفس الأجهزة الطرفية التي تستخدمها أجهزة الكمبيوتر الصغيرة. ومن هنا، تبنى نظام MS-DOS (1981) قواعد CR + LF الخاصة بـ CP/M لكي تكون متوافقة، وقد ورث نظام التشغيل Windows اللاحق من شركة Microsoft هذه القاعدة.

بدأ تطوير نظام التشغيل مولتكس في عام 1964 واستخدم LF وحده كسطر جديد. استخدم مولتكس برنامج تشغيل الجهاز لترجمة هذا الحرف إلى أي تسلسل تحتاجه الطابعة (بما في ذلك أحرف الحشو الإضافية )، وكان البايت الفردي أكثر ملاءمة للبرمجة. ما يبدو أنه خيار أكثر وضوحًا - CR - لم يتم استخدامه، حيث قدم CR الوظيفة المفيدة المتمثلة في طباعة سطر فوق سطر آخر لإنشاء تأثيرات الخط العريض والشرطة السفلية والشطب . ربما الأهم من ذلك ، أن استخدام LF وحده كفاصل للسطر قد تم دمجه بالفعل في مسودات معيار ISO / IEC 646 النهائي . اتبع يونكس ممارسة مولتكس، وتبعت أنظمة يونكس الشبيهة بيونكس لاحقًا يونكس. أدى هذا إلى تعارضات بين أنظمة التشغيل Windows وأنظمة التشغيل الشبيهة بيونكس ، حيث لا يمكن تنسيق الملفات المكونة على نظام تشغيل واحد أو تفسيرها بشكل صحيح بواسطة نظام تشغيل آخر (على سبيل المثال، نص برمجي UNIX shell مكتوب في محرر نصوص Windows مثل Notepad [3] [4] ).

التمثيل

ترتبط مفاهيم إرجاع العربة (CR) وتغذية السطر (LF) ارتباطًا وثيقًا ويمكن النظر إليهما بشكل منفصل أو معًا. في الوسائط المادية للآلات الكاتبة والطابعات ، هناك حاجة إلى محورين للحركة، "لأسفل" و"عبر"، لإنشاء سطر جديد على الصفحة . على الرغم من أن تصميم الآلة (آلة كاتبة أو طابعة ) يجب أن يأخذهما في الاعتبار بشكل منفصل، إلا أن المنطق المجرد للبرمجيات يمكن أن يجمعهما معًا كحدث واحد. لهذا السبب يمكن تعريف السطر الجديد في ترميز الأحرف على أنه ودمجه في واحد (يُطلق عليه عادةً أو ). CRLFCR+LFCRLF

توفر بعض مجموعات الأحرف رمز حرف سطر جديد منفصل. على سبيل المثال، يوفر EBCDIC رمز حرف NL بالإضافة إلى رموز CR و LF . يوفر Unicode ، بالإضافة إلى توفير رموز التحكم ASCII CR و LF ، رمز تحكم "السطر التالي" ( NEL )، بالإضافة إلى رموز التحكم لعلامات "فاصل السطر" و"فاصل الفقرة". يحتوي Unicode أيضًا على أحرف قابلة للطباعة لتمثيل تغذية السطر ␊ وعلامة الإرجاع ␍ ورموز تحكم C0 الأخرى (بالإضافة إلى سطر جديد عام، ␤) في كتلة صور التحكم .

تطبيقات البرمجيات ونظام التشغيل تمثيل سطر جديد باستخدام حرف تحكم واحد أو اثنين
نظام التشغيل ترميز الأحرف اختصار القيمة السداسية قيمة الانحدار تسلسل الهروب
أنظمة Multics
POSIX الموجهة للمعايير: أنظمة Unix وأنظمة Unix-like ( Linux ، macOS ، *BSD ، AIX ، Xenix ، إلخ)، QNX 4+
أنظمة أخرى: BeOS ، Amiga ، RISC OS ، وغيرها [5]
أسكي LF 10
Windows ، ومتوافقات MS-DOS ، و Atari TOS ، و DEC TOPS-10 ، وRT-11 ، و CP/M ، و MP/M ، و OS/2 ، و Symbian OS ، و Palm OS ، و Amstrad CPC ، ومعظم أنظمة التشغيل المبكرة الأخرى غير Unix وغير IBM سي آر إل إف 0د 0أ 13 10 _ر_ن
Commodore 64 و Commodore 128 و Acorn BBC و ZX Spectrum و TRS-80 و Apple II و Oberon ونظام التشغيل Mac OS الكلاسيكي و HP Series 80 وMIT Lisp Machine و OS-9 اللغة الإنجليزية: CR 13
إخراج نص ملفوف باستخدام برنامج Acorn BBC [6] و RISC OS [7] LF CR 0أ 0د 10 13 _ن_ر
تنفيذ QNX قبل POSIX (الإصدار < 4) ر.س 1هـ 30 _036
أجهزة كمبيوتر أتاري 8 بت أتاسي نهاية العمر الافتراضي 155
أنظمة IBM المركزية، بما في ذلك z/OS ( OS/390 ) و IBM i ( OS/400 ) إيبكديك هولندا 15 21 _025
ZX80 و ZX81 (أجهزة كمبيوتر منزلية من Sinclair Research Ltd ) الترميز الخاص بـ ZX80 / ZX81 76 118
  • تستخدم أنظمة 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 السجلات فحسب، بل يخزن أيضًا البيانات الوصفية حول فواصل السجلات في بتات مختلفة للملف لتعقيد الأمور بشكل أكبر (نظرًا لأن الملفات يمكن أن تحتوي على سجلات ذات طول ثابت، أو سجلات مسبوقة بعدد أو سجلات منتهية بحرف معين). البتات ليست عامة، لذا في حين يمكنها تحديد أن 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 )
 NEL :الخط التالي، U+0085  
 LS :فاصل الأسطر، U+2028   
 PS :فاصل الفقرة، U+2029   

على الرغم من أن الأمر قد يبدو معقدًا للغاية مقارنة بنهج مثل تحويل جميع علامات إنهاء الأسطر إلى حرف واحد (على سبيل المثال LF )، نظرًا لأن Unicode مصمم للحفاظ على جميع المعلومات عند تحويل ملف نصي من أي ترميز موجود إلى Unicode والعكس ( سلامة ذهابًا وإيابًا )، يحتاج Unicode إلى إجراء نفس التمييزات بين فواصل الأسطر التي يتم إجراؤها بواسطة ترميزات أخرى.

على سبيل المثال: NL هو جزء من EBCDIC ، والذي يستخدم الكود 0x15 ؛ يتم تعيينه عادةً إلى Unicode NEL ، 0x85 ، وهو حرف تحكم في مجموعة التحكم C1 . [10] وعلى هذا النحو، يتم تعريفه بواسطة ECMA 48، [11] ويتم التعرف عليه من خلال الترميزات المتوافقة مع ISO/IEC 2022 (وهو ما يعادل ECMA 35). [12] مجموعة التحكم C1 متوافقة أيضًا مع ISO-8859-1 . [ بحاجة لمصدر ] يسمح النهج المتبع في معيار Unicode بتحويل الرحلة ذهابًا وإيابًا للحفاظ على المعلومات مع تمكين التطبيقات من التعرف على جميع أنواع نقاط إنهاء الخط الممكنة.

لا يتم التعرف على واستخدام أكواد السطر الجديد الأكبر من 0x7F ( NEL و LS و PS ) في كثير من الأحيان. فهي عبارة عن بايتات متعددة في UTF-8 ، وقد تم استخدام الكود الخاص بـ NEL كحرف الحذف ( ) في Windows-1252 . على سبيل المثال:

الأحرف الخاصة في Unicode U+2424 ( رمز السطر الجديد ، )، و U+23CE ( رمز الإرجاع ، )، و U+240D ( رمز إرجاع العربة ، )، و U+240A ( رمز تغذية السطر ، ) هي رموز مخصصة لتقديم حرف مرئي للمستخدم لقارئ المستند، وبالتالي لا يتم التعرف عليها بنفسها كسطر جديد.

في لغات البرمجة

لتسهيل إنشاء البرامج المحمولة ، توفر لغات البرمجة بعض التجريدات للتعامل مع أنواع مختلفة من تسلسلات السطر الجديد المستخدمة في بيئات مختلفة.

توفر لغة البرمجة C تسلسلات الإفلات '\n' (سطر جديد) و '\r' (إرجاع العربة). ومع ذلك، ليس من الضروري أن تكون هذه التسلسلات مكافئة لأحرف التحكم ASCII LF و CR . يضمن معيار C شيئين فقط:

  1. يتم تعيين كل من تسلسلات الهروب هذه إلى رقم فريد محدد بواسطة التنفيذ ويمكن تخزينه في قيمة حرف واحدة .
  2. عند الكتابة إلى ملف أو عقدة جهاز أو مقبس/FIFO في وضع النص ، يتم ترجمة '\n' بشكل شفاف إلى تسلسل السطر الجديد الأصلي المستخدم بواسطة النظام، والذي قد يكون أطول من حرف واحد. عند القراءة في وضع النص، يتم ترجمة تسلسل السطر الجديد الأصلي مرة أخرى إلى '\n' . في الوضع الثنائي ، لا يتم إجراء أي ترجمة، ويتم إخراج التمثيل الداخلي الناتج عن '\n' مباشرة.

على منصات يونكس، حيث نشأت لغة سي، يكون تسلسل السطر الجديد الأصلي هو ASCII LF ( 0x0A )، لذا تم تعريف '\n' ببساطة لتكون تلك القيمة. نظرًا لأن التمثيل الداخلي والخارجي متطابقان، فإن الترجمة التي يتم إجراؤها في وضع النص هي عملية غير عملية ، ولا يوجد لدى يونكس أي فكرة عن وضع النص أو الوضع الثنائي. وقد تسبب هذا في تجاهل العديد من المبرمجين الذين طوروا برامجهم على أنظمة يونكس للتمييز تمامًا، مما أدى إلى كود غير قابل للنقل إلى منصات مختلفة.

من الأفضل تجنب وظيفة مكتبة C fgets () في الوضع الثنائي لأن أي ملف غير مكتوب وفقًا لقواعد كتابة الأسطر الجديدة في يونكس سيتم قراءته بشكل خاطئ. أيضًا، في الوضع النصي، سيتم أيضًا قراءة أي ملف غير مكتوب وفقًا لتسلسل كتابة الأسطر الجديدة الأصلي للنظام (مثل الملف الذي تم إنشاؤه على نظام يونكس، ثم تم نسخه إلى نظام ويندوز) بشكل خاطئ.

هناك مشكلة شائعة أخرى وهي استخدام '\n' عند الاتصال باستخدام بروتوكول إنترنت يفرض استخدام ASCII CR + LF لإنهاء الأسطر. إن كتابة '\n' في مجرى نصي يعمل بشكل صحيح على أنظمة Windows، ولكنه ينتج LF فقط على Unix، وشيئًا مختلفًا تمامًا على الأنظمة الأكثر غرابة. إن استخدام '\r\n' في الوضع الثنائي أفضل قليلاً.

توفر العديد من اللغات، مثل C++ و Perl [20] و Haskell نفس تفسير '\n' مثل C. تحتوي C++ على نموذج إدخال/إخراج بديل حيث يمكن استخدام المعالج std::endl لإخراج سطر جديد (وتنظيف مخزن التدفق).

توفر Java و PHP [21] و Python [ 22] التسلسل '\r\n' (لـ ASCII CR + LF ). وعلى النقيض من C، من المؤكد أن هذه تمثل القيم U+000D و U+000A على التوالي.

لا تقوم مكتبات Java I/O بترجمة هذه بشكل شفاف إلى تسلسلات سطر جديد تعتمد على النظام الأساسي عند الإدخال أو الإخراج. بدلاً من ذلك، توفر وظائف لكتابة سطر كامل تضيف تلقائيًا تسلسل السطر الجديد الأصلي، ووظائف لقراءة الأسطر التي تقبل أيًا من CR أو LF أو CR + LF كفاصل سطر (انظر BufferedReader.readLine()). يمكن استخدام طريقة System.lineSeparator() لاسترداد فاصل السطر الأساسي.

مثال:

   سلسلة eol = System . lineSeparator (); سلسلة lineColor = "اللون: أحمر" + eol ؛   
        

يسمح Python بـ "دعم السطر الجديد الشامل" عند فتح ملف للقراءة، وعند استيراد الوحدات النمطية، وعند تنفيذ ملف. [23]

أنشأت بعض اللغات متغيرات وثوابت وبرامج فرعية خاصة لتسهيل إضافة سطور جديدة أثناء تنفيذ البرنامج. في بعض اللغات مثل PHP و Perl ، يلزم استخدام علامات الاقتباس المزدوجة لإجراء استبدال الهروب لجميع تسلسلات الهروب، بما في ذلك '\n' و '\r' . في PHP، لتجنب مشاكل قابلية النقل، يجب إصدار تسلسلات السطور الجديدة باستخدام ثابت PHP_EOL. [24]

مثال في C# :

   سلسلة eol = البيئة . NewLine ؛ سلسلة lineColor = "اللون: أحمر" + eol ؛ سلسلة eol2 = "\n" ؛ سلسلة lineColor2 = "اللون: أزرق" + eol2 ؛   
        
   
      
        

مشاكل مع تنسيقات السطر الجديد المختلفة

ملف نصي تم إنشاؤه باستخدام gedit وتم عرضه باستخدام محرر سداسي عشري . بالإضافة إلى كائنات النص، هناك فقط علامات نهاية الاستخدام بقيمة سداسية عشرية 0A.

تتسبب اتفاقيات السطر الجديد المختلفة في عرض ملفات النصوص التي تم نقلها بين أنظمة من أنواع مختلفة بشكل غير صحيح.

يظهر النص في الملفات التي تم إنشاؤها باستخدام البرامج الشائعة في أنظمة التشغيل الشبيهة بـ Unix أو Mac OS الكلاسيكي ، كسطر طويل واحد في معظم البرامج الشائعة في أنظمة MS-DOS و Microsoft Windows لأنها لا تعرض علامة واحدة line feedأو مفردة carriage returnكفاصل للأسطر.

على العكس من ذلك، عند عرض ملف نشأ من جهاز كمبيوتر يعمل بنظام Windows على نظام يشبه Unix، قد يتم عرض CR الإضافي على شكل فاصل سطر ثانٍ، مثل ^M ، أو مثل <cr> في نهاية كل سطر.

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

قد يكون من الصعب اكتشاف المشكلة لأن بعض البرامج تتعامل مع الأسطر الجديدة الأجنبية بشكل صحيح بينما لا تفعل برامج أخرى ذلك. على سبيل المثال، قد يفشل المترجم مع أخطاء نحوية غامضة حتى لو كان ملف المصدر يبدو صحيحًا عند عرضه على وحدة التحكم أو في محرر . تتعرف محررات النصوص الحديثة عمومًا على جميع أنواع الأسطر الجديدة CR + LF وتسمح للمستخدمين بالتحويل بين المعايير المختلفة. عادةً ما تكون متصفحات الويب قادرة أيضًا على عرض ملفات النصوص ومواقع الويب التي تستخدم أنواعًا مختلفة من الأسطر الجديدة.

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

تتطلب معظم بروتوكولات الإنترنت النصية (بما في ذلك HTTP و SMTP و FTP و IRC والعديد من البروتوكولات الأخرى) استخدام ASCII CR + LF ( '\r\n' , 0x0D 0x0A ) على مستوى البروتوكول، ولكنها توصي بأن تتعرف التطبيقات المتسامحة على LF الوحيد ( '\n' , 0x0A ) أيضًا. وعلى الرغم من المعيار المُملى، فإن العديد من التطبيقات تستخدم بشكل خاطئ تسلسل الهروب من السطر الجديد في لغة C '\n' ( LF ) بدلاً من التركيبة الصحيحة من تسلسل الهروب من إرجاع العربة وتسلسل الهروب من السطر الجديد '\r\n' ( CR + LF ) (انظر قسم السطر الجديد في لغات البرمجة أعلاه). يؤدي هذا الاستخدام العرضي لتسلسلات الهروب الخاطئة إلى حدوث مشكلات عند محاولة الاتصال بالأنظمة التي تلتزم بالتفسير الأكثر صرامة للمعايير بدلاً من التفسير المتسامح المقترح. أحد هذه الأنظمة غير المتسامحة هو وكيل نقل البريد qmail الذي يرفض بنشاط قبول الرسائل من الأنظمة التي ترسل LF عارية بدلاً من CR + LF المطلوبة . [25]

تنص صيغة الرسائل القياسية على الإنترنت [26] للبريد الإلكتروني على ما يلي: "يجب أن يظهر CR وLF معًا فقط كـ CRLF؛ ولا يجب أن يظهرا بشكل مستقل في النص". أدت الاختلافات بين تطبيقات SMTP في كيفية تعاملها مع أحرف LF و/أو CR المجردة إلى هجمات انتحال SMTP يشار إليها باسم "تهريب SMTP". [27]

يمكن لبروتوكول نقل الملفات تحويل الأسطر الجديدة تلقائيًا في الملفات التي يتم نقلها بين أنظمة ذات تمثيلات مختلفة للأسطر الجديدة عندما يتم النقل في "وضع ASCII". ومع ذلك، فإن نقل الملفات الثنائية في هذا الوضع عادة ما يؤدي إلى نتائج كارثية: أي حدوث لتسلسل بايتات السطر الجديد - والذي لا يحتوي على دلالات نهاية السطر في هذا السياق، ولكنه مجرد جزء من تسلسل بايتات عادي - سيتم ترجمته إلى أي تمثيل للسطر الجديد يستخدمه النظام الآخر، مما يؤدي فعليًا إلى إفساد الملف. غالبًا ما يستخدم عملاء FTP بعض الأساليب (على سبيل المثال، فحص امتدادات اسم الملف ) لتحديد الوضع الثنائي أو ASCII تلقائيًا، ولكن في النهاية الأمر متروك للمستخدمين للتأكد من نقل ملفاتهم في الوضع الصحيح. إذا كان هناك أي شك بشأن الوضع الصحيح، فيجب استخدام الوضع الثنائي، حيث لن يتم تعديل أي ملفات بواسطة FTP، على الرغم من أنها قد تعرض بشكل غير صحيح. [28]

التحويل بين صيغ السطر الجديد

غالبًا ما يتم استخدام محررات النصوص لتحويل ملف نصي بين تنسيقات سطر جديد مختلفة؛ يمكن لمعظم المحررين الحديثين قراءة وكتابة الملفات باستخدام اتفاقيات ASCII CR / LF المختلفة على الأقل .

على سبيل المثال، يمكن لمحرر Vim جعل الملف متوافقًا مع محرر النصوص Notepad في نظام التشغيل Windows. داخل vim

 : تعيين  تنسيق الملف = dos
 : وووق

قد لا تكون برامج التحرير مناسبة لتحويل الملفات الأكبر حجمًا أو التحويل الجماعي للعديد من الملفات. بالنسبة للملفات الأكبر حجمًا (على نظام التشغيل 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 إلى DOS (إضافة CRs على أنظمة التشغيل المستندة إلى Linux وBSD التي لا تحتوي على امتدادات GNU) $ awk '{gsub("\r",""); print;}' inputfile > outputfile # DOS إلى UNIX (إزالة CRs على أنظمة التشغيل Linux وBSD التي لا تحتوي على امتدادات GNU) $ sed -e 's/$/\r/' inputfile > outputfile # UNIX إلى DOS (إضافة CRs على أنظمة التشغيل Linux التي تستخدم امتدادات GNU) $ sed -e 's/\r$//' inputfile > outputfile # DOS إلى UNIX (إزالة CRs على أنظمة التشغيل 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

يمكن استخدام أمر Unix egrep (grep الممتد) لطباعة أسماء الملفات الخاصة بنظام 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

تفسير

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

في النص المخصص في المقام الأول للقراءة من قبل البشر باستخدام برنامج ينفذ ميزة التفاف الكلمات ، عادةً ما يلزم تخزين حرف السطر الجديد فقط إذا كان من المطلوب فصل السطر بغض النظر عما إذا كانت الكلمة التالية ستلائم نفس السطر، مثل بين الفقرات وفي القوائم الرأسية. لذلك، في منطق معالجة الكلمات ومعظم محرري النصوص ، يتم استخدام سطر جديد كفاصل للفقرة ويُعرف باسم "العودة الصلبة"، على النقيض من "العودة الناعمة" التي يتم إنشاؤها ديناميكيًا لتنفيذ التفاف الكلمات ويمكن تغييرها مع كل مثيل عرض. في العديد من التطبيقات، يوجد حرف تحكم منفصل يسمى "فاصل السطر اليدوي" لفرض فواصل الأسطر داخل فقرة واحدة. عادةً ما يكون الحرف الرسومي لحرف التحكم للرجوع الصلب هو pilcrow (¶)، وبالنسبة لفاصل السطر اليدوي، يكون عادةً سهم إرجاع العربة (↵).

تغذية الخطوط العكسية والجزئية

يتم استخدام RI ( U +008D REVERSE LINE FEED ، [30] ISO/IEC 6429 8D، عشري 141) لتحريك موضع الطباعة للخلف سطرًا واحدًا (عن طريق التغذية العكسية للورق، أو عن طريق تحريك مؤشر العرض لأعلى سطرًا واحدًا) بحيث يمكن طباعة أحرف أخرى فوق النص الموجود. يمكن القيام بذلك لجعلها أكثر سماكة، أو لإضافة خطوط تحتية أو شطب أو أحرف أخرى مثل علامات التشكيل .

على نحو مماثل، يمكن استخدام PLD ( U +008B PARTIAL LINE FORWARD، عشري 139) و PLU ( U +008C PARTIAL LINE BACKWARD، عشري 140) لتقديم أو عكس موضع طباعة النص بمقدار جزء من المسافة الرأسية للأسطر (عادةً، النصف). ويمكن استخدام هذه معًا للحروف السفلية (بالتقديم ثم العكس) والحروف العلوية (بالعكس ثم التقديم)، وقد تكون مفيدة أيضًا لطباعة العلامات الإعرابية.

انظر أيضا

مراجع

  1. ^ "ما هو السطر الجديد؟". www.computerhope.com . تم الاسترجاع في 10 مايو 2021 .
  2. ^ كوالين ، ستيف (2001). تم تحسين Vi - Vim (PDF) . سامز للنشر . ص. 120. ردمك 9780735710016. مؤرشف من الأصل (PDF) في 8 أبريل 2022 . استرجاع 4 يناير 2023 .
  3. ^ Duckett, Chris. "Windows Notepad finally understands everyone else's end of line characters". ZDNet . مؤرشف من الأصل في 13 مايو 2018 . تم الاسترجاع في 4 يناير 2023 . [A]بعد عقود من الإحباط، واضطرارنا إلى تنزيل محرر نصوص حقيقي لتغيير سطر واحد في ملف تكوين من جهاز Linux، قامت Microsoft بتحديث Notepad ليكون قادرًا على التعامل مع أحرف نهاية السطر المستخدمة في بيئات Unix وLinux وmacOS.
  4. ^ لوبيز، ميشيل (8 مايو 2018). "تقديم دعم نهايات الأسطر الممتدة في المفكرة". سطر أوامر Windows . مؤرشف من الأصل في 6 أبريل 2019. تم الاسترجاع في 4 يناير 2023. كما هو الحال مع أي تغيير في أداة راسخة منذ فترة طويلة، هناك احتمال ألا يعمل هذا السلوك الجديد في السيناريوهات الخاصة بك، أو قد تفضل تعطيل هذا السلوك الجديد والعودة إلى سلوك المفكرة الأصلي. للقيام بذلك، يمكنك تغيير [... مفاتيح التسجيل...] لتعديل كيفية تعامل المفكرة مع لصق النص، وأي حرف نهاية عمر يجب استخدامه عند الضغط على Enter/Return
  5. ^ Kahn-Greene, Will Guaraldi. "مخطط ASCII". bluesock.org .
  6. ^ براي، أندرو سي؛ ديكنز، أدريان سي؛ هولمز، مارك أ. (1983). دليل المستخدم المتقدم لجهاز الكمبيوتر الصغير التابع لهيئة الإذاعة البريطانية (PDF) . مركز كامبريدج للحاسبات الصغيرة. ص 103، 104. رقم ISBN 978-0946827008تم الاسترجاع بتاريخ 30 يناير 2019 .
  7. ^ "إخراج الأحرف". دليل مرجعي لمبرمجي RISC OS 3. 3QD Developments Ltd. 3 نوفمبر 2015. تم الاسترجاع في 18 يوليو 2018 .
  8. ^ بطاقة بيانات مرجعية لنظام IBM/360، منشور GX20-1703، قسم معالجة البيانات في IBM، وايت بلينز، نيويورك
  9. ^ هينينجر، آندي (20 سبتمبر 2013). "UAX #14: خوارزمية كسر الأسطر في يونيكود". اتحاد يونيكود.
  10. ^ "مجموعة أحرف التحكم C1 من ISO 6429" (PDF) . ITSCJ. IPSJ. 1 أكتوبر 1983. تم الاسترجاع في 3 مارس 2022 .
  11. ^ وظائف التحكم لمجموعات الأحرف المشفرة (PDF) (تقرير). ECMA International. يونيو 1991.
  12. ^ بنية رمز الحرف وتقنيات التمديد (PDF) (تقرير) (الطبعة السادسة). ECMA International. ديسمبر 1994.
  13. ^ "ECMAScript 2019 Language Specification". ECMA International. يونيو 2019. 11.3 Line Terminators.
  14. ^ "ECMAScript 2019 Language Specification". ECMA International. يونيو 2019. 11.2 المساحة البيضاء.
  15. ^ براي، تيم (مارس 2014). "السلاسل". تنسيق تبادل البيانات لـ JavaScript Object Notation (JSON). القسم 7. doi : 10.17487/RFC7159 . RFC 7159.
  16. ^ "استيعاب JSON (المعروف أيضًا باسم JSON ⊂ ECMAScript)". GitHub . 22 مايو 2018.
  17. ^ "ECMAScript 2019 Language Specification". ECMA International. يونيو 2019. 11.8.4 String Literals.
  18. ^ "ECMAScript 2018 Language Specification". ECMA International. يونيو 2018. 11.8.4 String Literals.
  19. ^ "5.4. أحرف كسر السطر". YAML Ain't Markup Language revision 1.2.2 . 1 أكتوبر 2021.
  20. ^ "binmode". وثائق Perl . Perl 5 Porters.
  21. ^ "PHP: Strings - Manual". دليل PHP . مجموعة PHP.
  22. ^ "2. التحليل المعجمي". مرجع لغة بايثون . مؤسسة بايثون.
  23. ^ "ما الجديد في Python 2.3". مؤسسة برمجيات Python.
  24. ^ "PHP: الثوابت المحددة مسبقًا - دليل". دليل PHP . مجموعة PHP.
  25. ^ بيرنشتاين، دي جي "LFs العارية في SMTP".
  26. ^ ريسنيك، بيت (أبريل 2001). تنسيق الرسائل عبر الإنترنت. doi : 10.17487/RFC2822 . RFC 2822.
  27. ^ لونجين، تيمو (18 ديسمبر 2023). "تهريب SMTP - انتحال رسائل البريد الإلكتروني في جميع أنحاء العالم". استشارة هيئة الأوراق المالية والبورصات .
  28. ^ Zeil, Steven (19 January 2015). "نقل الملفات". جامعة أولد دومينيون. مؤرشف من الأصل في 14 مايو 2016. في حالة الشك، قم بالنقل في الوضع الثنائي.
  29. ^ Sapp, Craig Stuart. "تحويل نص ASCII بين UNIX وMacintosh وMS-DOS". مركز أبحاث الكمبيوتر في الموسيقى والصوتيات. مؤرشف من الأصل في 9 فبراير 2009.
  30. ^ "C1 Controls and Latin-1 Supplement" (PDF) . unicode.org . تم الاسترجاع في 13 فبراير 2016 .
  • مرجع Unicode؛ راجع الفقرة 5.8 في الفصل 5 من معيار Unicode 4.0 (PDF)
  • "حرف السطر الجديد [NEL]".
  • لغز نهاية الخط
  • فهم السطور الجديدة في آلة Wayback (تم أرشفتها في 20 أغسطس 2006)
  • "قصة نهاية الخط"
تم الاسترجاع من "https://en.wikipedia.org/w/index.php?title=Newline&oldid=1252511109"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate