在JavaScript中获取特定平台的换行符?

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";
}

这个函数看起来似乎没问题,但是通过阅读新行维基百科文章后,我注意到最近的苹果操作系统(OS X及以上)现在使用UNIX风格的\n行尾。因此,我的小函数可能对于这种情况返回错误的结果(我没有苹果电脑来测试它)。 有没有办法让Firefox告诉我特定平台的换行符是什么?也许有一些内置的实用程序函数吗?我在我的扩展写入的文本文件中使用这些换行符,我想使用特定于平台的换行符,以便在各种系统上看起来合适。 更新(2-13-2013): 在Mac-mini(OS X)上运行navigator.platform.toLowerCase()函数调用后,我得到输出值为macintel。这将导致我的函数返回\r而不是应该返回的\n

1
不是我的答案,但很聪明:https://dev59.com/43M_5IYBdhLWcg3w9oIA#1156388 - runspired
有一个API(nsLinebreakConverter.cpp nsLinebreakConverter.h),但是正如您所看到的,它已经过时了,更重要的是它仅供内部使用。 - paa
3个回答

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";
}

我非常确定“mac”情况不应该发生,因为它没有在OS TARGET变量中列出作为可能性(我通过nsIXULRuntime中的OS属性进行测试)。


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编码为适合操作系统的格式(我非常确定):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".


0

如果你只想按换行符拆分文本,就不需要进行任何判断,可以像这样操作:

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

如果您需要获取底层Web服务器的换行符,可以通过Ajax调用来获取,并且如果使用ASP.NET,则可以返回类似于以下内容的东西。
Environment.NewLine

很遗憾,我没有生成任何HTML(它只是一个简单的纯文本文件),我对客户端的换行符感兴趣(即Firefox正在运行的操作系统)。 - Jonah Bishop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接