2013-02-08 102 views
6

साल पहले, मैं एक के लिए निम्नलिखित समारोह लिखा था मेरी Firefox ऐड-ऑन जो मुझे एक मंच विशिष्ट न्यू लाइन चरित्र प्राप्त मदद करता है:जावास्क्रिप्ट में प्लेटफ़ॉर्म विशिष्ट न्यूलाइन वर्ण प्राप्त करना?

GetNewLine: function() 
{ 
    var platform = navigator.platform.toLowerCase(); 

    if(platform.indexOf('win') != -1) // Windows 
     return "\r\n"; 
    else if(platform.indexOf('mac') != -1) // Mac 
     return "\r"; 
    else // *nix 
     return "\n"; 
} 

यह ठीक से काम करने लगता है, लेकिन newline Wikipedia article पढ़ने के बाद मैं ने कहा कि हाल ही में ऐप्पल ऑपरेटिंग सिस्टम (ओएस एक्स और बाद में) अब यूनिक्स स्टाइल \n लाइन एंडिंग का उपयोग करते हैं। इस प्रकार, मेरा मामला उस मामले के लिए गलत चीज़ वापस कर रहा है (मेरे पास मैक ओएस नहीं है जिस पर इसका परीक्षण किया जाए)।

क्या कोई तरीका है कि मैं फ़ायरफ़ॉक्स प्राप्त कर सकता हूं कि प्लेटफॉर्म-विशिष्ट न्यूलाइन कैरेक्टर क्या है? शायद कुछ प्रकार के अंतर्निर्मित उपयोगिता फ़ंक्शन? मैं अपने एक्सटेंशन लिखने वाली टेक्स्ट फाइलों में इन न्यूलाइन का उपयोग कर रहा हूं, और मैं प्लेटफार्म विशिष्ट एक का उपयोग करना चाहता हूं, ताकि फाइलें विभिन्न प्रणालियों में उपयुक्त दिखें।

अद्यतन (2013/02/13): तो एक मैक मिनी पर navigator.platform.toLowerCase() समारोह कॉल (ओएस एक्स) चल रहा है पर, मैं उत्पादन मूल्य macintel मिलता है। इसके परिणामस्वरूप मेरा कार्य \n के बजाय \r लौटाएगा जैसा कि इसे करना चाहिए।

+1

मेरा उत्तर नहीं बल्कि एक स्मार्ट वाला: http://stackoverflow.com/a/1156388/1883464 – runspired

+0

वहां एक एपीआई है ([nsLinebreakConverter.cpp] (http://mxr.mozilla.org/mozilla-central/source/xpcom/io/nsLinebreakConverter.cpp) [nsLinebreakConverter.h] (http://mxr.mozilla.org/ मोज़िला-मध्य/स्रोत/xpcom/io/nsLinebreakConverter.h)), लेकिन जैसा कि आप इसे पुराना देख सकते हैं, और अधिक महत्वपूर्ण बात यह है कि यह केवल आंतरिक उपयोग के लिए है। – paa

उत्तर

2

का उपयोग कर यहाँ है कि मैं क्या का उपयोग कर समाप्त हो गया है:

GetNewLine: function() 
{ 
    var OS = Components.classes["@mozilla.org/xre/app-info;1"]. 
      getService(Components.interfaces.nsIXULRuntime).OS; 

    return /winnt|os2/i.test(OS) ? "\r\n" : /mac/i.test(OS) ? "\r" : "\n"; 
} 

मुझे पूरा यकीन है कि "मैक" केस कभी नहीं होना चाहिए, क्योंकि यह OS TARGET वैरिएबल में एक संभावना के रूप में सूचीबद्ध नहीं है (जिसे मैं संपत्ति nsIXULRuntime में देख रहा हूं)।

0

किसी भी निर्धारित करने के लिए कोई ज़रूरत नहीं है, तो आप सिर्फ नई-पंक्तियों पर पाठ विभाजित करना चाहते हैं, तो आप इस तरह कुछ कर सकता है:

htmlstring = sNewLine.replace(/(\r\n|\n|\r)/gm, "<br>"); 

आप अंतर्निहित वेबसर्वर को न्यू लाइन की जरूरत है, तो आप इसे एक अजाक्स कॉल के साथ प्राप्त कर सकते हैं और कुछ इस तरह वापसी अगर ASP.NET

Environment.NewLine 
+0

दुर्भाग्य से, मैं कोई भी HTML उत्पन्न नहीं कर रहा हूं (यह एक साधारण सादा-पाठ फ़ाइल है), और मुझे * क्लाइंट * साइड के न्यूलाइन कैरेक्टर में रुचि है (यानी ओएस जिसमें फ़ायरफ़ॉक्स चल रहा है)। –

1

अद्यतन 1/16/15: एन्कोडिंग ओएस विशिष्ट नए लाइन चरित्र को संभाल नहीं करता है।

irc से

:

07:49 futpib i guess encoding is for charset only 
07:49 Will character encoding is nothing to do with OS-specific line-endings 

आप OS.File का उपयोग करें और TextEncoder यह उचित (आईएम यकीन है कि) ओएस अपने \ N encodes हैं: https://developer.mozilla.org/en-US/docs/JavaScript_OS.File/OS.File_for_the_main_thread

let encoder = new TextEncoder();         // This encoder can be reused for several writes 
let array = encoder.encode("This is some text");     // Convert the text to an array 
let promise = OS.File.writeAtomic("file.txt", array,    // Write the array atomically to "file.txt", using as temporary 
    {tmpPath: "file.txt.tmp"});         // buffer "file.txt.tmp".